脈絡はありません inoway

ハードルは低いほど飛びやすいをモットーに駆け出したエンジニアです

Dependabot対応とオンラインDDLについて

特にテーマを決めずに技術的な記事を書いてみようと思い立って書いている。

今までのペースだと月に2回ぐらいで書いていて、それが当たり前になるとだんだんアウトプットの腰が重くなってきて良くないよなと感じていた。

月に1回はちゃんと腰を据えて書くとして、それ以外はわりと気楽に書いて知識を定着させたり、考えを深掘りする機会を増やそうと思った。

最近やってたこと

Dependabotが立てたPRをオートアサインする

Dependabotはライブラリの依存関係を自動的にアップデートするPRを作ってくれるbotで、アプリの脆弱性への対応をサポートしてくれる非常に優れたツールだ。このDependabotが立てたPRにworkflowを発火させて、CODEOWNERSを自動的にアサインするようにしようとしていた。

ただ、Dependabotが作成するPRはセキュリティの観点で、write権限が制限されていたり、tokenを渡せなかったりする制約があって、なかなかworkflowを正常に動かすことができなかった。

(以下記事などを参考にさせてもらっていました)

engineering.mobalab.net

当初、複数リポジトリでDRYに動かせるようにreusable workflowを使って発火させていたが、前述のtokenの制約によりなかなか動いてくれなかったりした。悪戦苦闘したおかげでworkflow周りに詳しくなることができたけど、デバッグがしづらくてなかなか大変だった。

ただオートアサインがなかったとしてもDependabotが立てたPRには日々対応していくべきで、それは今後も強く意識を持ってやっていきたい。

※まるで自分がやったかのように書いたけど、全体の3%ぐらいしかやっていない。元々他の方がreusable対応などもされていて、動いてないのに気づいて直そうとして、力不足で直せなかったというお話

既存のテーブルにdefault: falseのカラムを追加する

100万件のレコードがあるテーブルに、default: falseのカラムを追加しようとしている。つまり100万件のレコードを追加することになるはずなので、DBに負荷がかかりダウンタイムが発生することが懸念されていた。

それをどうやって実行するのかというと、オンラインスキーマ変更ツール(pt-ost、go-hst)などを用いて、仮テーブルを作っておいてそれを良きタイミングで実テーブルと入れ替えるような処理が対策の一つらしい。

ただ、今日色々と先輩に教わりオンラインDDLというマイグレーション方法があるらしいことを知った。DDL(Data Definition Language)とは、データ定義言語と呼ばれるSQLの命令のことで、SELECT文などレコードを操作する DML(Data Manipulation Language)と違い、テーブルに直接変更を加える。ALTER句でテーブル全体に変更を加えて、default: falseのカラムを一括適用しようということだと思う。

まだオンラインDDLについてはキャッチアップ中なので、また進捗があれば良きタイミングでアウトプットしてみる。今日書いていて思ったけど、うっかり大事な情報を書いてしまわないように内容の抽象度を保ちながら書いていこうと思った。

chatGPTコーナー

Dependabotとは何ですか

Dependabotは、GitHubが提供する自動依存関係更新サービスです。このサービスは、プロジェクトの依存関係を自動的に更新することで、セキュリティ上のリスクを軽減し、ソフトウェアのメンテナンスを助ける目的があります。

Dependabotは、プロジェクト内で使用されているライブラリやパッケージの最新バージョンに関する情報を定期的にチェックし、新しいバージョンが利用可能になった場合に、自動的にプルリクエスト(Pull Request)を作成します。これにより、開発者は依存関係を最新の状態に保ち、セキュリティ脆弱性やバグを修正することができます。

Dependabotは、多くのプログラミング言語やパッケージマネージャーに対応しており、JavaScript(npm, yarn)、Python(pip)、Ruby(Bundler)、Java(Maven)、PHP(Composer)などがサポートされています。また、GitHubと緊密に統合されているため、プロジェクトの設定やワークフローに簡単に追加することができます。

オンラインDDLとは何ですか

オンラインDDL(Data Definition Language)は、データベース管理システムにおいて、テーブル構造やインデックスの変更など、データベースオブジェクトを操作するための言語です。DDLには、CREATE(作成)、ALTER(変更)、DROP(削除)などの操作が含まれています。

オンラインDDLとは、データベースの運用中に、これらのDDL操作を実行できる機能を指します。オンラインDDLを使用することで、データベースのダウンタイムを最小限に抑えつつ、スキーマ変更やインデックスの追加・削除が可能になります。これにより、データベースのパフォーマンスや機能性の向上が容易になります。

一部のデータベース管理システム(例:MySQL、Oracle、PostgreSQLなど)では、オンラインDDLがサポートされており、運用中のデータベースでスキーマ変更を行うことができます。ただし、オンラインDDLの実装や対応範囲は、データベース管理システムによって異なります。

chatGPTに頼りすぎると次第に脳死でコマンドを打つようになってしまう危険性を感じたので、内容を鵜呑みにしないこと、ちゃんとレビューしてから使うようにしないとなという気づきも得た今日この頃でした。chatGPTはたしかにすごいけど、使いこなすにはやはり実力が必要という当たり前のことを実感しました。