2024-07-03
FK設定で詰まった話
こんにちは データべースの設定で詰まったので、その時のメモを残しておきます。 テーブル名等に関しては、実際の値とは異なるものを記載しています。 ## 前提 - データベース: PostgreSQL v16.3 - 使用言語 - PHP v8.3 - Laravel v11 ## 例 とある中間テーブルを作成していました。 ここでは下記テーブルを例にして説明します。 - ahiahi_somethingテーブル - とある何かを表すテーブル - ahiahi_something_patternテーブル - とある何かのパターンを表すテーブル - ahiahi_something_pattern_mappingテーブル - とある何かがどのパターンであるかを表すテーブル - パターンが複数あるため、中間テーブルを作成 構成 - ahiahi_somethingテーブル - ahiahi_something_id - name - ahiahi_something_patternテーブル - ahiahi_something_pattern_id - name - ahiahi_something_pattern_mappingテーブル - ahiahi_something_pattern_mapping_id - FK: ahiahi_something_id - FK: ahiahi_something_pattern_id ## 現象 ahiahi_something_pattern_mappingテーブルのmigrationファイルを作成し、migrateしようとしたところ、エラーが発生しました。 migrationファイルの一部抜粋 ```php Schema::create('ahiahi_something_pattern_mapping', function (Blueprint $table) { $table->bigint('ahiahi_something_pattern_mapping_id')->primary()->autoIncrement(); $table->uuid('ahiahi_something_id'); $table->uuid('ahiahi_something_pattern_id'); $table->timestamps(); $table->unique(['ahiahi_something_id', 'ahiahi_something_pattern_id']); $table->foreign('ahiahi_something_id') ->references('ahiahi_something_id') ->on('ahiahi_something') ->onDelete('cascade'); $table->foreign('ahiahi_something_pattern_id') ->references('ahiahi_something_pattern_id') ->on('ahiahi_something_pattern') ->onDelete('cascade'); }); ``` エラーメッセージ ``` SQLSTATE[42710]: Duplicate object: 7 ERROR: constraint "ahiahi_something_pattern_mapping_ahiahi_something_pattern_id_fo" for relation "ahiahi_something_pattern_mapping" already exists ( Connection: pgsql, SQL: alter table "ahiahi_something_pattern_mapping" add constraint "ahiahi_something_pattern_mapping_ahiahi_something_pattern_id_foreign" foreign key ("ahiahi_something_pattern_id") references "ahiahi_something_pattern" ("ahiahi_something_pattern_id") on delete cascade ) ``` 既に同名のFK制約が存在している...?してないが??? という状況でした。 ちなみに、実際のテーブルを確認しても、FK制約は存在していませんでした。 ```sql SELECT constraint_name, table_schema FROM information_schema.table_constraints WHERE table_name = 'ahiahi_something_pattern_mapping' AND constraint_type = 'FOREIGN KEY'; ``` ↑ そもそもテーブル自体存在していないので、当然FK制約も存在しません。 table_nameの制約を外しても同じような制約は存在しませんでした。 ## 原因 結果的には、FK制約などの識別子が63文字を超えてはいけないことが問題でした。 今回は、パターンのFKが長すぎたためにエラーが発生していました。 `"ahiahi_something_pattern_mapping_ahiahi_something_pattern_id_foreign" ` という名前が長すぎたのです。 エラーメッセージと原因が違いすぎて、無限に時間を溶かしました。。。 エラー分の最初が、`constraint "ahiahi_something_pattern_mapping_ahiahi_something_pattern_id_fo" for relation` と途中で切れていたので、 そこに違和感をおぼえていれば、すに気づいたかもしれません。。。(誰が分かんねん) dataGripを使用して、実際に発行されるSQL文を実行しようとしたところ、 コンソール上で長すぎるよと警告が表示されたので、原因に気づくことができました。 ## 解決策 今回は、例で言う `ahiahi` をprefixのように使っていたので、それを削除してFK制約の名前を短くしました。 場合によっては、省略文字を使用して短くするのも良いかもしれませんが、個人的にはあまり好ましくはないです。 正直ベストプラクティスは全然分かりません。 ## まとめ - Postgresにおいて、識別子は63文字までという制約がある。 - DBの設定で詰まったら生SQLを発行してみると良いかも。 - エラーメッセージでおかしい箇所は疑ってみると良いかも。
2024-04-16
API Night参加してきました
これまでPostmanを深く触ったことはありませんでした。 PHPerKaigi2024へ参加した際に、Postmanのブースでお誘いを受けこのイベントに参加することにしました。 こちらも雑なメモですが、一応残しておきます。 ## Postman v10 リリース後を振り返る postman flows GUIでAPIを呼び出す流れみたいなものを作ることができる。 Noコードのアプリケーションを作ることができる。 APIテストとかに使えそうだと思った。 AIアシスタント 開発・テストの際にAIがアシストしてくれる。 テスト用のスクリプトとかを書いてくれるらしい。 Postmanインターセプタ ブラウザの拡張機能でAPIのリクエストをキャプチャできる。 トラフィックに介入できて、選ぶことができる(ドメインを指定) Cookie情報を含めてチェックできる。 Firefox, Chromeで使える。 パフォーマンステスト 負荷をかけてシュミレートを行うことができる。 こういうやつはそれ用のコードとかで指定できるんかな? VSCode拡張機能 Postmanインサイト エンドポイントの稼働状況、エラー状況等を確認できる。 認証認可について OAuth2.0, OpenID Connect, JWT, SAML, Basic認証などに対応している。 リフレッシュトークンの自動更新もできる。 共同開発などで使用できるトークンの共有などもできる。 プロトコルへの対応 REST, GraphQL, SOAP, gRPC, Kafka, MQTT, WebSocketsなどに対応している。 GraphQLでエンドポイント入れるとExplorer出てきて、Queryを作成できる。 ## 業務ツールとしてのPostman 環境変数の設定もできて、環境ごとにボタンポチで切り替えられる。 Flowをwebhookで呼び出すこともできる。 ## OpenAPIを中心に考えるAPI開発入門 OpenAPI Toolsというものがあるらしい テストやドキュメント生成、モックサーバーの作成などができる。 OpenAPI Generatorでコードを自動生成すると、 PHPではリクエストのバリデーションなどのコードが生成される。 よって、ビジネスロジックを書くことに専念できる。 OpenAPIをPostmanと組み合わせることによって、 モックサーバーを立てることができる。 Stoplight Studioでできる説...? ## Postman可視化でクイックプロトタイプ Ideas are easy. Execution is everything. 良い習慣を養うコツの一つは Make it easy. ビジュアライズの機能を使うことで、テーブル形式で画像のURLとかも合わせて表で表示することができる。 ChatBotも合わせて使うことによって、望んだビジュにしてくれる。 ## PostmanでAPI の動作確認が楽になった話 CI/CDで組み込めるらしい Github Actionsで動作確認 Tests機能、スクリプトでテストかける。 PostBot使うと結構楽にテストを作ることができる。 Collection Runner コレクションのなかに置いてあるリクエストを一括で実行できる。 PostmanCLI ぽちぽちでyamlまであらかた書いてくれるらしい memo - https://api-first-world.com/ja/ - https://www.postman.com/product/flows/ - https://aadojo.alterbooth.com/entry/2022/12/21/100000
2024-03-22
LTいってきた
こんにちは 今日はLTに行ってきました。 イベント情報 - [システムソフトLT大会](https://www.systemsoft.co.jp/lightningtalks) めちゃめちゃ雑なメモですが、一応残しておきます ## 登壇内容 ### システムソフト社のAI活用推進WGについて ChatAIの話 AI活用推進WGの活動内容 - ChatGPTなどを扱う時に安全にどう使うかのガイドラインを作成 - 理解度チェックなどを行うなどの運用ルールの作成 推しのChatAI - ChatGPT - Copilot - GPT-4がベース - 回答の根拠についても出力してくれる - Gemini - なんかすごいらしい - プログラミング系となるとChatGPTの方がいいかも 普遍のものはChatGPT 最新のものだとCopilot, Gemini 仕事ならChatGPT AI生成の真偽確認はどうやるの? → これ難しい問題 ### 最近のフロントエンドの動向 SSR と SPA SEOを最適化したいかどうかで選択する SSR - Next - Remix AppRouter - CDNとの相性が悪い PagesRouter - CDNとの相性がいい - Cache-Controlヘッダーをカスタマイズできる - 開発が終わってる Remix - Web標準が組み込まれているフレームワーク - Cache-Controlヘッダーをカスタマイズできる SPA React + Vite - Routingがめんどくさい - Viteの設定を自前でしないといけない Remix SPA - チャンクの最適化 - ルーティングが楽 - 複雑なViteの設定が不要 - SPAとSSRの関数がいり混じっている Next.js SG + SPA ### 一問一答!過去に経験した障害集。 障害・不具合を共有することで、他の人が同じような問題に遭遇した時に対処できるようにする ### イネイブリングチームの挑戦 メンバーのKPIの作成 その可視化 ガイドライン等の作成を行ったが失敗に終わった 検討時間が長かった 業務が増えるように感じるので 今できること目線で改成善に取り組んだ
2024-01-07
最近知って良かったツールとかのまとめ
こんにちは 2024年初記事です。 今回はちょっと前に導入し、使ってみて良かったなと思っているツールについてちょっと紹介しようかなと思います! ## yabai, skhd 1つ目はこちら。 名前が「やばい」ってことでインパクトありますよね。 これらが何をしてくれるかというと、 - yabai: アプリケーションウインドウの配置をいい感じにしてくれるツール - skhd : yabaiをショートカットキーで扱えるようにできるツール という感じです👀 WindowsやLinuxだとこの辺は割と当たり前にできるのですが、 Macだとデフォルトでできないのでいい方法ないかなと思っていた時に出会いました。 ちなみに適応するとこのようになります。 なんかいい感じですよね  これ自動でいい感じに整理してくれるのでとても便利です。 導入の際にSIPの無効化が必要だったりでちょっと大変なので、 もし導入される方は気をつけてください⚠️ Wikiを読んだらいけます(多分)👀 GitHubはこちら - [yabai](https://github.com/koekeishiya/yabai) - [shdh](https://github.com/koekeishiya/skhd) ## Arc Browser 続いてはブラウザです! 公式サイトは[こちら](https://arc.net/)です。 このブラウザはこれまでのブラウザとは違い、サイドバーに全てがまとまっています! これによって、タブが死ぬほど増えちゃう方でも見やすいですし、お気に入りへのアクセスも簡単にできます! もちろんこのサイドバーは閉じることもできます。 サイドバーを閉じるとほぼ全画面でページだけが表示されるので一画面の情報量も増えて便利です🔥 また、基本的な操作はChromeと変わらないかつ、拡張機能も互換性があるので、 現在Chromeに慣れている方もすんなり切り替えることができます。 画面は以下のような感じです👀  慣れるまでちょっとだけ癖はありますが、慣れたらとても使いやすいです! 現在は分かりませんが、Macにしか対応していなかったり、日本語対応していなかったりなどがあるのでそこだけ注意ですね⚠️ ## さいごに 今回はこれらの2つを紹介しました! どちらも知り合いのエンジニアたちに教えてもらったのですが、 みんなこのようなツールたちについてどこから情報を収集しているのが謎です。。 もし他にもイケてるツールなどを知っている方は是非教えてください!!
2023-12-31
2023年振り返りと2024年の目標
こんにちは いよいよ2023年が終わりますね。 振り返りをやろうと思っていましたが、なかなか手が動かずにもう19時になってしまいました。。 言い出したからには書かないと2023年に取り残されちゃうのでさっさと書き上げようと思います🔥 ## 2023年の目標 2023年にどのような目標をたてていたのかを見ていきます。 Twitterで書いてたくらいなんですけど、以下のような感じでした。 - インフラを独走できるようになる - 設計への理解を深める - 去年よりコード書く - 自分のサイト作る ### インフラを独走できるようになる 2023年より前は1人でサービスのインフラを設計、構築、CI/CDの作成、etc をやったことがありませんでした。 しかし、2023年は `AWS, Terraform, Ansible` へ入門し、 10個近くのサービスのインフラを1人で担当しました⛏️ まだまだ至らない点は多くありますが、この目標は達成できたと思います! ### 設計への理解を深める 設計とは言っても色々ありますが、 ここではバックエンドのファイル構造などの設計、インフラのアーキテクチャを考えるという2つとします。 インフラに関しては、先述の通り数をこなしたので理解が深まったと思います。 バックエンドについては、様々な案件で色々変えながら試行錯誤を行ってきました。 これまでは、こう書いた方がいいと言われたことをそのままトレースしていましたが、 現在はそのサービスにとってのメリットデメリットを考えることができるようになりました。 正直、より何も分からん状態にはなっていますが、成長した証であると思っています。 ### 去年よりコードを書く 去年は毎日コードを書くということを目標にしていて、 無事にGitHubのContributionsを緑で染めることに成功しました。 そこで今年は去年よりコードを書くことを目標にしました! 結果は、`5,295 → 7,380` ということで `+2,000` という結果でした🔥 1日のContribution数の平均が20なので、割とたくさん手動かせたなと思っています。 量は増えましたが、今年は何もしない日が多くあったので、 そこだけは反省点かなと思っています。 ### 自分のサイトを作る こちらは見ての通り、このサイトを作成しました!! アプデ案がまだいくつかあるので、継続的に開発していこうと思っています。 意外と速くていいですよね⛏️ 白黒だけのデザインにしたんですけど、色があった方がいいのかなとか思ってます。 ## 2024年の目標 振り返ってみると2023年結構色々やったな〜と思っています。 2024年はもう少し目標設定を高くしていこうかなとか思ったり👀 ということで、来年の目標は以下の通り! - GitHub Contribution数 `8,000` 超え - 本3冊以上読む - 空き時間に記事読んだり書いたり - カンファレンスで登壇 - PHPの基礎を学ぶ テックリードにもなったので、外部の人にも胸を張って 「テックリードやってます」と言えるような技術力を付けていきます💪
2023-12-01
テックリードになった
こんにちは 最近書くことをサボってしまっているので、 ちゃんと定期的に書いていこうと思っています。 さて、タイトルの通りですが、 わたくしtake-cantikは、本日付けで株式会社ハックツの **「テックリード」** という役職に任命されました。 本当にありがたい話です。 ## テックリードとは? テックリード(Tech Lead, TL)という役職は、プロジェクトやプロダクトにおける **技術面でのリーダー** のことで、 所謂エンジニアのリーダーという感じだと認識しています。 基本的には、チーム単位で存在する役職らしいのですが、 弊社は人数の少ない会社なので、開発組のリーダーというポジションになると思います。 テックリーダーは以下のような役割を果たすポジションとのことです。 - チームの生産性向上 - 開発の進捗管理 - プロダクトの設計 - チームの窓口 - メンタリング、レビュー - プロジェクトの品質向上 ## これから 新卒1年目時点でこの役職となるのは少しプレッシャーですが、 あまり気負い過ぎず、とりあえずはできることから一歩一歩やっていきます。 上記でテックリードについて書きましたが、もちろんこれが全てではないですし、 その会社に合った動き方があるはずなので、その辺りを意識して色々模索していきます。 直近の課題としては以下のような感じなのかなぁと思います。 - 技術力・知識の向上(永遠の課題) - 判断能力の向上 - コミュニケーション能力の向上 気合い入れていきます💪🔥
2023-11-15
アウトプット、ダイジ
こんにちは 最近急に寒くなって凍えております 季節の変わり目はいつも風邪ひいてる気がします、、、 ## 本日のtake-cantik 今日は今月末に行われるLT会の資料作成をしていました。 このタイミングで書くとネタバレにはなりますが、SOLID原則についてのLTをしようと思っています。 多分このページを定期的に見る人はいないので大丈夫でしょう() ## 資料作成っていいよな LTでもハンズオンでもそうですが、資料作成をするとその内容に対する理解がめちゃめちゃ深まりますよね。 インプットしたものを人に伝わるようにいい感じにまとめてアウトプットするという、なかなか難しい行為だと思います。 大学時代に入っていたサークルでは月一でLT会があったので、定期的にアウトプットする場所があり、人前の発表のハードルが下がるという、とてもいい習慣だったなと感じています。 現在も続いているようなので今後にも期待ですね👀👀 しかし最近、世のLT会の開催率が下がっているような気がします。 LT会はやはりオフラインが盛り上がりますが、やはりコロナのせいもあり最近その道に入った人たちは、オフラインのLT会の楽しさが分かってない説を推しています。 カンファレンスなどは最近オフライン開催が増えてどんどん盛り上がりを見せてきているので、LT会ももっと盛り上がる事を期待しています! LTの方がハードル低いので、そこからカンファレンスへの道筋になり、さらにカンファレンスも盛り上がる事間違いなしと思ってます。 そろそろプロポーザルを出さねば…
2023-11-04
フロントのむちむちが出てしまった。
こんにちは、今日はこのマイページ作成を進めています。 ## Next.jsへの移管した フロント知識が薄すぎて、NextではなくReactでSG(SSG)ができると思い込んでおり、 色々やり方を調べては出て来ず詰んでました。 しかし、Next.jsの方でできることを知って早急に移管することになりました。 indexのページまでしか作っていなかったので、まだギリ耐えでした。 ## 移管中の工夫 このページはmainにpushされると自動でデプロイされるようにしているので、 移管のタイミングでmainが壊れないように以下の手順でNext.jsに置き換えました。 1. Reactのディレクトリ、`client/` を `react-client/` へrenameする 🚚 2. それに合わせて、デプロイアクションなどで `react-client/` を見るようにする ⚡ 3. 新しく `client/` で Nextのプロジェクトを作成 ✨ 4. デプロイしているところまで `client/` を更新 ⚡️ 5. デプロイ先を `client/` へ変え、動いているか確認する 🚀 6. `react-client/` を削除する 🔥 リファクタする時はこのようにやっているので、完全な移管をするときもちゃんと活きてきましたね。