本連載では第一線のPerlハッカーが回替わりで執筆していきます。Vol.91のサポートサイトから入手できます。Codeという言葉はここ数年とても注目されています。読者のみなさんも一度は目にしたことがあるのではないでしょうか。Codeは,サーバの環境構築やデプロイを行う際に用いる手順書をコードに落とし込み,そのコードに対応したツールを使って自動的に実行するしくみです。Requestベースでサービスのインフラを構築できます。Codeを実現する際に有用なモジュールと,その使い方について解説します。Codeを構築できることです。Codeを実現するツールはたくさん公開されていますが,それぞれのツール特有の記法や,場合によってはプログラミング言語の知識を習得しなければなりません。ChefやCapistrano,Serverspecを利用するのであれば,Rubyの知識が必要となるでしょう。CodeにもPerlを利用することによって学習コストを低減できます。Codeを実現するにあたっては,チームメンバー全員がコードをコントロールでき,サービスそのものやサービスに必要なインフラの変化に追随していかなければなりません。チームメンバーがPerlという使い慣れた道具を持っているのであれば,それを有効に活用して高速に実装することは重要です。いえ,サービスのすべてのインフラをPerlでコード化するのは困難です。Perlという得意な言語を軸にオペレーションをコード化しつつ,たとえばサーバの環境構築であればChefやItamae,Ansibleなどのツールを採用したり,環境構築の結果を検証したいのであればServerspecを採用したりと,Perlにこだわらずに適材適所でツールを選ぶべきでしょう。Codeを実現する場合,オペレーション単位でスクリプトを用意し,そのスクリプトを実行することでオペレーションを実施するのが一般的です。スクリプトが増えると,どのスクリプトがどのオペレーションに対応するかわからなくなることが多々あります。そんなときは,Daikuを使ってオペレーションを呼び出すようにすると非常にすっきりします。DaikuとはDaikuは,makeやRubyのRakeを参考に実装されたビルドツールです。さまざまな処理(タスク)をDaikufileにまとめることができ,そのタスクはdaikuコマンドを利用して実行できます。ここでは,Perlを利用して実装したさまざまなオペレーションを,Daikuでまとめる際に有用な機能に集中して解説します。それ以外の機能については,興味があればDaikuのドキュメントを参照してください。タスクの登録と実行Daikuで実行したいタスクは,前述のとおりDaikufileと呼ばれるファイルに記載していきます。world!という文字列を出力するhelloというタスクを実装してみましょう。この場合,Daikufileは次のようになります。world!\n";};taskの第1引数にあたる文字列helloがタスク名です。第2引数にあたるサブルーチンリファレンスがこのタスクを実行した際に行う処理です。定義したタスクは,Daikufileが設置されたディレクトリでdaikuコマンドにタスク名をパラメータとして与えることで実行できます。world!namespaceによるタスクの階層化たとえばappというオペレーション対象に,環境構築を行うbuildと,デプロイを行うdeployというタスクをDaikufileに設定したい場合を考えます。タスク名としてそれぞれapp_build,app_deployのように,オペレーション対象とタスク名を_で連結して登録することもできますが,このような場合はnamespaceを使ってタスクを階層化したほうが,よりスマートにDaikufileを記述できるでしょう。namespaceを利用すれば,appというオペレーション対象に対するbuildとdeployという名前のタスクは,次のように記述できます。app:buildのように,namespaceで指定した名前空間とtaskで指定したタスク名を:で連結した文字列で呼び出せます。namespaceはネストすることもできます。appが利用するデータベースのマイグレーションを実行するタスクであれば,次のように記述するとよいでしょう。app:db:migrateで呼び出せます。複数のタスクをまとめて実行Daikufileではtaskの第2引数に対して,次のように複数のタスク名を含んだ配列リファレンスを渡すことができます。};};この場合はappのタスクを実行するだけで,app:buildとapp:deployの両方のタスクをまとめて実行できます。引数付きのタスクDaikufileで設定するタスクは,次のように引数を受け取ることができます。${name}!\n";};引数付きのタスクは,次のように呼び出すことができます。daiku!タスクの説明の記載と確認Daikufileでは次のように,taskの直前にdescを使うことでタスクの説明を記載できます。-Tコマンドで確認できます。appに対するデプロイ処理の切り出しによるDaikufileの整理Daikuを利用することで,オペレーションの定義をDaikufileという1つのファイルに集約できます。オペレーションのためのコードをすべてDaikufileに記載すると,Daikufileに大量のコードが記載され,メンテナンスしづらくなります。これを防ぐためには,次のようにオペレーションのためのコードをMyApp::Task::Buildなどに切り出し,Daikufileはこれを呼び出すだけにとどめるとよいでしょう。MyApp::Task::Build->run();};<続きの(2)はこちら。Code著者プロフィール福本貴之(ふくもとたかゆき・papix)株式会社ガイアックスのエンジニア。2014年に入社して以来,主にPerlを使った社内基盤ツールの開発や,エンジニアリング環境の改善,技術広報,そして採用などに取り組んでいる。2012年にPerlの初心者向け勉強会「Perl入学式」を立ち上げて以降,エンジニアに対する教育や成長に関心を持っている。趣味は鉄道を使った旅行と地域のPerlコミュニティへの参加,そして食べ歩き。寿司とラーメンには目がない。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。