作りたいCLIツール
他にもあるが、使い方が直観的でないのと出来ることが多すぎて特定用途に特化していないため
ただ単純にワンショットだけ実行したい
起動する箇所も既存のクラスター上ならどこでもいいみたいなゆるい条件の指定が出来るCLIがなかなかない
適当なCLIツールが見当たらない
prettierはphpがまだblade対応中
beautifierはblade directiveが入るとインデントがなくなる
VSCode用のblade-formatterプラグイン
CLIだけからでなく編集中に適宜formatしていきたい
LambdaでRDSへクエリを実行して結果をCLIのターミナル上に表示するもの
DBオペレーション専用のツールが欲しい
DBオペレーションのためだけに踏み台を用意していろいろするとかは面倒
SSMで管理するにしてもポートフォワーディングのログが残らなかったりEC2のユーザ管理だとかは依然残る
DBオペレーションの必用があればCLIから直接行えるようにする
操作可能なオペレーションはLambdaリソースのIAMポリシーやDBユーザのpermissionで切り分ける
純粋なDBオペレーション用lambda functionとLambdaを叩いて結果をformatするCLIが必用
formatを選べるようにする
CSV
Table
outputを出力するか選べるようにする
ターミナルに表示しきれない場合もあるので出力サイズがでかいものは出力ファイルで確認する
クエリを発行するfunctionとは分ける
シェルスクリプトだけで組んでもいいがAWS CLIのバージョンに依存しそうなのとAWS CLI標準では出力ファイルがそのまま出力されてダーティなので何かしらでラップして選択時のみファイルを出力するようにしたい
ただシェルスクリプトでも数行程度なのでその程度のラップにGoを使うほどでもないというのもある
シェルスクリプトはあくまでPoC程度にはいいが実運用で使い始めるとメンテナンスが著しく難しくなる
他人が読めないシェル芸に走りがち
テスト機構も貧弱なため修正も難しい
Lambdaでの責務としてはRDSへのクエリのみ
CLIの責務としてはLambdaの起動と返ってくるレスポンステキストをユーザがリクエストした形にフォーマット
現状想定されるオペレーションとしてはRead, Insert, Update, Data Load, Export等
ExportはReadで出力されるアウトプットを標準出力に出力し、リダイレクトまたはファイルWriteでdumpの代替が出来る
ただLambdaのレスポンスサイズLimitが6MBなので大体10万件程度のレコードで上限に達する
それ以上のレコードのエクスポートには一つのクエリで返ってきたレコード(例: 10万件)をLambdaのローカルに出力してS3にUploadするか複数コマンドを実行して結果を結合するかのどちら
理想的にはコストの高い一つのクエリを出すよりかはオフセットでページングした細かいクエリを大量に出して結果を結合するようなMap-Reduce形式がよい
クエリを解析してLIMITとOFFSETを足す? or select クエリにLIMITとOFFSETをデフォルトで足すか
パスワードジェネレータ
Rust製
特にRustである必然性はない
強いて言えばメモリ安全でオーバーヘッドがなく大量に生成出来る
pronounceableなパスワードが欲しい
child processをマルチプロセスで並列実行するやつ
Colorlizer
TerraformのCI回すSetUpを楽にするやつ
Terraformでセキュリティコンプライアンスを満たしているかをコンフィグによってバリデーションすることが出来るもの
AWS Configでは満たすことは出来るが結局AWS上でコンプライアンス準拠か確認するしかなく状態を持ってしまう
ステートレスにリポジトリと単純にCIのみでコンプライアンスに準拠出来ているか確認出来るようにしたい
必用なこと
TerraformのHCLのパース
必用なコンプライアンスルールがなければ推奨するもしくはCIを落とす
tfsecで既に出来る
DevSecOpsを意識したツールチェイン
Securityコンプライアンスチェックの自動化
今のところ正直Guardduty, Security HubやAWS Configなどで自動化している方が楽というのはある
何%コンプライアンス準拠しているかの可視化、変更したリソースの証跡取得、変更への自動再チェック、通知等まで含めるとローカルのみで静的に解決するのは難しいところもある
コンプライアンスレポートは経営判断であり、DevSecOpsとはいえ常にセキュリティは開発とトレードオフになりがちなので説得資料としての可視化したレポートは強い意味を持つ
またなぜセキュリティリスクに対応するべきなのかということを常にリスクベースでの説明責任がある
監査の自動化
GitHub Action化
ベストプラクティスを自動的にレポート出来るようにする
コンプライアンス準拠状況が分かること
40%のユーザがMust Haveと言えるか?
Terraformユーザは基本的にCI指向が強く既にIoC化はされているのでCIを回すこと自体には抵抗はないはず
60%のユーザはSecも導入したいと仮定する
そのうち半分がこれは必須と思えれば30%がMust Haveと言える
具体的に興味ある層の50%にリーチ出来る方法とは何か?まずどこにリーチするか?
少なくともそのコミュニティの大半が知ることの出来る方法、公式Forum、Reddit, IRC, メーリングリストなど…その中のEarly Adapterが評価してこれを使うべきというムーブに持っていければ20%くらいにリーチ出来るはず
具体的に使うべきとリコメンドさせるムーブにするにはそのエコシステムを強固に強化するものでなければならない
エコシステムの仕組み自体へのコントリビュート
開発プロセス自体へのコントリビュート
現状の開発プロセスのボトルネックを解消するコントリビュート
DevSecOpsのツールチェインをワンストップで提供するプラットフォーム
ソースコードから脆弱性が報告されている依存を検知し警告する
tfsecはあるもののルール数が少なかったりプラガブルじゃなくて物足りない感あるのでpsalmのようなプラガブルなものが欲しい
またESLintのようにコード書いている時にリアルタイムで警告が出るというのが開発体験的には優れている
vscode-textmateでHCLをパースする
リソース種類によってルールに定義されたパラメータとそのvalueで警告を出す?
tfalm
ルールはAWS SecurityHubのSecurity Best Practive v2準拠
こういったツールチェインはOSSはのため常にオルタナティブがあることも重要
車輪の再発明かどうかはOSSを作る上ではあまり気にしなくていい
利用シーンを具体的に想像出来るもの
terraform planに時間がかかる
現在のStateのDiffから全体のリソースのDiffを取るから仕方ないところはある
山を作るもの
谷を埋める作業というよりは得意なことを伸ばす方向性
といっても自分のプログラミングに対する態度はあくまでプログラミングも全体最適の中の一つであるべきだと思っていて単独でそのアーキテクチャが決まるものだと思っていない
その全体最適のバランスを考えるのは好きだけど個別に最適なものは何かと言われるとあまり興味ない
featureブランチデプロイを実現するCLI
featureブランチの名前でDNSレコードを作成
ECSにserviceとタスクdefinitionを作成
Target Groupを作成
ALBにホストベースヘッダマッチングでのruleを追加し該当のTGにforwardさせる
作成が完了したらSlackにURLを通知
ブランチがマージされたらWebhookで該当のタスクとserviceを削除
DBも一から作成したい
作成したserviceのtask definitionでコンテナでmysqlコンテナを追加する?
featureブランチ毎にDBが作られる
まずshellscriptで実現しGoなどのCLIを作成するC?CIで毎回バイナリDLするのもだるいしpythonパッケージでもいいか
grepコマンドの代替
rip-grep, ack, agなどあるがどれも結局コマンド詳しく覚えられていない
最小限のxx "target" dirぐらいしか覚えていない
ので最小限それのみうまく実現するhuman friendlyなminimalなgrepが欲しい
gitignoreを考慮する
特定のディレクトリに何かファイルが入った時にそのファイルを引数にコマンド実行するやつ
Picturesディレクトリにmp4が入ったらffmpegで自動的にGIFファイルに変換する等
Facebookがそんなの出してた
ただ高機能すぎてちょっとよく分からない
シンプルにディレクトリ、実行コマンドだけ実行出来るバイナリが欲しい
もしくはElectronなどでインターフェースが欲しい
mp4 to gif変換
ffmpegでもいいけどffmpeg自体のインストールが色々面倒だったり他の依存が多いのでシンプルにmp4 to gifの変換するやつ
Rustでもいいか
diralias
ディレクトリベースのalias
.aliasrcのようなファイルでプロジェクトベースでalias定義
direnvのようなもの
phoenix_sail
laravel/sailのphoenix版