岩田智哉(64)23はじめにサーバーレス開発部@大阪の岩田です。hookを便利・かつ簡単に管理する方法について調べていました。調べたところ、Python製のpre-commitというツールが良さげだったので使い方を簡単にご紹介します。pre-commitとは?Gitのpre-commitフックスクリプトを管理・メンテナンスするためのフレームワーク(位置付け的にツールの方がしっくり来るので、この記事ではツールと呼びます)です。pre-commit自体はPython製ですが、Python以外の言語で書かれたプロジェクトに導入したり、Python以外の言語で書かれたhookスクリプトを管理することもできます。公式サイトでは以下のように説明されています。hooks.やってみる実際に使ってみます。pre-commitのインストールまずpre-commitをインストールします。現在開発中のプロジェクトではpipenvでライブラリを管理しているので、pipenvを使ってpre-commitを導入します。pre-commit設定ファイルの作成インストールできたらpre-commitの設定ファイルを作成します。設定ファイルは.pre-commit-config.yamlというファイル名で作成します。sample-configというサブコマンドでサンプルの設定が出力できるので、まずはこれを使ってみます。.pre-commit-config.yaml作成された設定ファイルはこんな感じです。check-added-large-files詳細をみていきましょう。reposhookスクリプトが存在するリポジトリのリストを指定します。GitHubで公開されているリポジトリを指定することで車輪の再発明が不要になります。revreposで指定されたリポジトリのリビジョンもしくはタグを指定します。reposで指定したリポジトリから、このセクションで指定されたバージョンのソースコードを取得してhookスクリプトとして利用します。hooks実際に実行するhookスクリプトをリストで指定します。id各hookスクリプトのIDを指定します。リポジトリ内に存在するhookスクリプトのファイル名と一致(.pyは不要)するよう設定します。設定ファイルの準備ができたので、Gitのhookスクリプトを導入します。.git/hooks/pre-commitという出力が表示されれば導入完了です。適当にコミットしてみるhookスクリプトが導入できたので、試しに何かコミットしてみます。files..............................................Passed設定ファイルの記述に沿ってhookスクリプトの取得と実行が行われているのが分かります。設定のカスタマイズサンプルが正しく動作していることが確認できたので、pre-commitで実行するスクリプトを追加してみます。今回はLizardでソースコードのサイクロマチック数を計測し、閾値を超えていた場合はコミットさせないような設定を追加してみます。lizardpre-commitの設定ファイル内に以下の記述を追加します。^test_.*$repohookスクリプトが存在するリポジトリを指定します。サンプルではGitHubのリポジトリが指定されていましたが、localと指定することで、hookスクリプトを実行する自身のGitリポジトリを指定できます。この機能を使うことでソースコードと自作のhookスクリプトをまとめて管理することが可能です。namehookスクリプト実行中に標準出力に表示される文字列を指定します。repoにlocalを指定している場合はid,name,language,entryに加えてfilesもしくはtypesの指定が必須となります。entrypre-commitのhookで実行するスクリプトを指定します。オプションでサイクロマチック数の閾値を10に設定しましたlanguagehookスクリプトを実行するための言語を指定します。pythonやpython_venv以外にもrubyやnodeも指定可能です。excludehookスクリプトの実行対象から除外するファイルを正規表現で指定します。typeshookスクリプトのチェック対象を指定します。python]という指定することでコミット対象からpythonのファイルのみが抽出され、hookスクリプトの引数に渡ります。設定のテスト設定がカスタマイズできたので、試しに滅茶苦茶なソースコードのコミットを試みます。ソースコードを準備します。passこのファイルのコミットを試みます。1.00無事にコミットに失敗しました。これで保守性の低いコードの混入を防止出来そうです。まとめpre-commitの使い方について簡単にご紹介しました。Gitのhookスクリプトは便利な仕組みではありますが、スクリプトを.gitディレクトリ以下に配置する必要があるため、バージョン管理やPJメンバーへの配布をどのように行うのかが課題になります。pre-commitを利用することでこのような問題を解決し、より快適なGitライフが送れそうです。hookスクリプトの管理に悩んでいる方は是非利用を検討してみて下さい。642,457回転するのが大好きなサーバーレスエンジニアです。〜ログ収集、監視、分析を触って体感しよう!〜」を開催しますお申し込み受付は終了しました。ありがとうございました。今後セミナーのお知らせを受け取りたい方は、こちらからご登録をお願いします。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。平野重利123Pythonで、標準入力を変換して標準出力に出すCLIプログラムのテンプレートをご紹介します。菊池修治47こんにちは、菊池です。勉強会#1に登壇しました。サーバのみならずネットワーク機器の仮想化も年々進んでいます。スペックに縛られないこととか、展開のしやすさとか初期考慮点が少なくなるのは嬉しいです。武田隆志1098このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。悠紀235ShifterはWordPress環境をサーバーレスで立ち上げ、静的なサイトを生成することができるサービスです。FAQサイトをサクッと作ってみました。Takumi227こんにちは。DA事業本部の春田です。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。