分はじめに前回は品質を保ちながらコードを改善していくコツや技術的負債の賢い返済方法について説明しました。今回は,修正したコードが本番環境で動かない状況を避けるにはどうしたらよいかをお話しします。Integration,以下CI⁠)⁠」ツールによる自動化が有効な手段の1つです。今や開発現場になくてはならない存在となったCIですが,みなさんの環境では導入されているでしょうか。そもそも何のためにCIが必要なのか,まずはおさらいしたいと思います。CIとは,ソフトウェア開発過程において,ビルドやテストを頻繁に繰り返し行うことにより問題を早期に発見する開発手法です。ソフトウェアの不具合は早い段階で発見するほうが,あとの工程で発見されるより対策にかかるコストが抑えられるため,頻繁にビルドを行うのが好ましく,ビルド結果が正しいことを検証するためにテストを行います。ビルドやテストを頻繁に毎回手動で行うのは手間がかかります。そこで,特定のタイミングで自動的にビルドやテストを実行し,完了後にその結果を通知する「CIツール」が広く利用されています。CIツールによる自動化のメリットは多く,単純作業から開発者を解放し,設計や実装などの知的な作業に集中できるようになります。従来の開発では,「⁠私の環境ではビルドできるが他人の環境だとビルドできない」「⁠ビルドはアノ人にお願いしないとできない」「⁠ビルド手順を間違えてうまくソフトウェアが動かない」といった場面がたびたびありました。作業を自動化して暗黙知の作業や属人性を排除することで,作業のミスがなくなり,誰でも実行可能なソフトウェアを作成できるようになります。本稿では,数あるCIツールの中から,Atlassian社が提供するCIツール「Bamboo(バンブー⁠)⁠」をベースにCIの方法を説明します。BambooについてBambooでは,ビルド用のプロジェクトとデプロイ用のプロジェクトを作成できるようになっています。ビルド用のプロジェクトでは,プランという単位でビルドのシナリオを定義します。ビルドのシナリオには,「⁠ステージ」という概念と「ジョブ」という概念があります。ジョブでは,一連のビルドタスクを構成していきます。ソースコードをチェックアウトして,ビルドツールでビルドを行い,テストを実施する,といったタスクを組みます。3.X」「⁠Script」という3つのタスクを持っている構造を示しています。これらのタスクは,あらかじめ用意されているものを利用できます。そのためスクリプトをゴリゴリ書くことは必要最低限で済みます(図2⁠)⁠。Bambooにあらかじめ用意されているタスクデプロイ用のプロジェクトでは,どのビルドの成果物をどの環境にデプロイするか,タスク,実行タイミングをどうするか,などをデプロイ対象の環境ごとに定義します(図3⁠)⁠。デプロイもビルドと同様に,あらかじめ用意されているタスクから選択してデプロイを構成します。デプロイ用のプロジェクト実行タイミングは,ビルドが成功したら即時にデプロイするとか,1日1回決まった時間にデプロイする,などの設定ができます。手動でデプロイすることもできます。手動でのデプロイは数クリックで簡単に実行できます。ほかにもBambooは次のような機能を持っています。ブランチの自動検出GitやMercurial,Subversionのリポジトリを使用している場合に限りますが,リポジトリでブランチが作成された際に,Bambooが自動でブランチを検出し,プランを自動で作成します。そのため,開発者はブランチを作成し,作成したブランチにコードをコミットするだけで,Bambooが自動的にブランチを検出してビルドやテストを行ってくれます。通知設定ビルドやデプロイの実行時に特定の条件で通知ができるようになっています。ビルド完了時に必ず通知する設定は言うまでもなく,最新のビルドが成功から失敗に変化した場合といった条件で通知を設定することもできます。連続でビルドに失敗した場合という条件も指定できるので,たとえば5回ビルドに失敗した場合はプロジェクトの管理者に通知してエスカレーションするといった使い方も考えられます。通知はEメール,Atlassianが提供しているチャットアプリであるHipChat,その他にもXMPPプロトコルを使用してIMアプリへ送ることも可能なので,ビルドやデプロイの状況をリアルタイムに把握できます。リモートエージェントほかのサーバにビルドを分散させるリモートエージェント機能を利用できます。ビルドやテストは多くの場合,メモリやCPUを大量に必要とするので,複数サーバによる分散ビルドを行うことで負荷を分散させることができます。リモートエージェント機能は負荷分散以外にも有効で,BambooがインストールされているOS以外のプラットフォームでビルドやテストを行いたい場合にも利用できます。以上,継続的インテグレーションを行う理由と,そのツールの1つであるBambooについてざっと説明しました。後編では,Bambooを使った開発の流れを見てみましょう。日本だけでなく,アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは,各アトラシアン製品の体験版を提供しているほか,アトラシアン製品専用のコミュニティも運営しています。Bamboo著者プロフィール持田秀敏(もちだひでとし)天下泰平をひそかに願う小市民な技術者です。Atlassian製品のJIRA製品群,Bitbucket,Bambooなど開発プロセスの技術コンサルからアドオン開発まで何でもやります。言うは易く行うは難し。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。