こんにちは!こんばんは!プロトソリューション 技術広報の川満です!
今回の記事は先日12/18に開催された「Tech BASE Okinawa(テックベースオキナワ)」のレポートを参加者目線で投稿させて頂きます!
※弊社が運営している「CODE BASE OKINAWA」は主催団体として参加しています!

Tech BASE Okinawaって??

新しい技術の学びを体験できる、沖縄最大級のエンジニア向けTechイベントです!これからエンジニアを目指す方・学生の方もお楽しみ頂けてる内容になっており、沖縄でトップエンジニアとして活躍されている方々からのトークセッション・参加者によるLT大会など様々な催しが開催されていました!

※詳しくはイベント情報へ

資料はこちらから

Session1

UZABASE 小副川 健さん
事業と共に育てる機械学習システムのこれまでとこれから

Session2

株式会社Alpaca Lab 松井 豊さん
日本一の禁煙アプリをつくっちゃった件

Session3

UZABASE 矢野 勉さん
プログラミング言語とシステムデザイン – Clojure, Java, DDD, Clean Architecture

Session4

株式会社プロトソリューション 比嘉 由紀さん
プログラム未経験の私がプログラミングと出会って人生激変した話

Session6

UZABASE 小玉 祐輝さん
Webアクセシビリティを身近にする

Session7

株式会社プロトソリューション レッティグ・セバスチャン・ペーターさん
サーバーレスアプリケーションの開発とデプロイ
IaCを含む、スマートな環境構築の旅

Session8

株式会社Alpaca Lab 棚原 生磨さん
起業&スタートアップで働くという選択肢

Session9

ちゅらデータ株式会社 真嘉比 愛さん
国内におけるAIの最先端事例紹介 〜2022年のトレンド予想を添えて〜

Session10

沖縄科学技術大学院大学(OIST)船井 正太郎さん
一人一人に寄り添う文章が書けるAIを目指して

Session11

株式会社 クアンド 西 孝幸さん
クラウドで手軽に始めるモダンなモニタリング

LT-1

CBcloud株式会社 新垣 雄志さん
データ指向プログラミング(仮)のススメ

LT-2

サイボウズ株式会社 西原翔太さん
草の根 IT コミュニティに着目した新しい郷土資料
流氷交差点



見所

Keynote Speech(基調講演)には和田卓人さんにご登壇頂きました!
企業の技術顧問を担当されており、テスト駆動開発の第一人者でソフトウェア開発に関わる書籍の執筆・監修もおこなっているTech業界を代表される方です!

他にもテックリードエンジニアの方や経営者の方も多数登壇されました!

Keynote

メインイベントのKeynoteが始まりました~!登壇者は前述で紹介させて頂いた和田卓人さん!
テーマは「堅牢なコードを書く – 例外、表明、契約による設計」です!
※大きな会場ですがほとんど席が埋まってますね・・・!

今回のテーマで重要な部分としてはコードの内側から品質をあげていこう。という点となり、

賢明なソフトウェア技術者になる為の第一歩は、動くプログラムを書くことと正しいプログラムを適切に作成することの違いを認識すること -M.A.Jackson(1975)-

引用コメントにある違いを埋める為にはどのような設計が必要なのか?というお話を以下3つのパートに分けてお話頂きました!

第1部:予防的プログラミング

処理の失敗は色々な原因が考えられるが、特に多いのがコードの使い方を誤った形で設計するという部分なのでそこに着目し、失敗しにくいコードを作る必要がある。その為には正しい予防的プログラミングの知識を身に着ける必要があるが、意外と誤った認識をお持ちの方が多いとの事・・・!

・プログラミングに対して防御的になること、つまり「そうなるはずだ」と決めつけないこと
・予防的プログラミングの根底にあるのは、他のコードのせいで不正なデータがあったとしても
 影響を受けないようにすること

上記は登壇されて際におっしゃっていた予防的プログラミングについてのコメントです!
確かに他に影響を受けないという観点は凄く大切だと思いますし、心理的なバイアスがかかって「だろう」的な考えで進めてしまう事は誰しもがあるはず・・・!勉強になります!!



第2部:攻撃的プログラミング

攻撃的プログラミング = 早めにクラッシュさせるような作りにする
・障害を抱えて中途半端に動いているプログラムよりも死んだプログラム方がダメージが少ない
・「あり得ない」何かが発生した際にプログラムは実行可能なもの(要望を満たせない)ではない
上記が定義となり、正当性堅牢性のバランスが大事でクラスは正当性を重視し、アーキテクチャ/フレームワーク等で堅牢性を保証する事をおススメされていました!
正当性=確からしさ。不正確な結果を返すぐらいなら何も返さない方がよい
堅牢性=不正確な結果を返しても動き続ける

第3部:契約プログラミング

このパートも凄く響きました・・・!

不具合や欠陥を減らすために間違えにくい設計していく。但し一人一人が予防のみに固執してしまうと周りのメンバーを信用できなくなり、重複した作業が発生する事で内部品質(可読性や変更容易性)が下がってしまう。

これは恐ろしい。。。ですがありがちなのかなっと思いました。。
こちらについてのアクションは「誰が予防的or攻撃的プログラミングを担当する?何をやるべきか?を決め(信じる)契約による設計で要求されたこと以上・以下の事を行わない。」という事でした。
何事も自身と他者の役割を理解し、責任をもって業務に臨むことが大切なんだな。と強く思いました!!



Keynoteまとめ

予防的プログラミングで間違えにくいコードを書き、それでも障害が発生した場合を想定して攻撃的プログラミングの観点で早めにクラッシュ(影響を拡大させない・障害を早めに検知)させてしまおう!
但しきちんと自身・他者の役割を理解し、責任をもつ事が大切である!という所をしっかり意識していきたいと思えるとても身になる内容でした!

各Session

Keynoteも終了し、お昼は美味しいお弁当も頂けて満足★ご馳走様でした!!
午後もためになるセッションが目白押しです!!!

Session1

登壇者:UZABASE 小副川 健さん 
「事業と共に育てる機械学習システムのこれまでとこれから」
教師データに関する課題克服の体験談やこれから挑戦される目標を惜しげもなく発表されており、
今後機械学習システムを取り入れる際には要チェックだなと感じました!

Session2

登壇者:株式会社Alpaca Lab 松井 豊さん 
「日本一の禁煙アプリをつくっちゃった件」
強い信念に圧倒されましたし、アプリを作る上で大切な考え方を学ばせて頂きました!
エンジニアとしてはもちろん、人としても尊敬出来る温かい方でした!!

Session3

登壇者:UZABASE 矢野 勉さん
「プログラミング言語とシステムデザイン-Clojure,Java,デザインパターン,DDD,CleanArchitecture-」
言語毎の種類や特徴の違いについて発表して頂きました!凄い人の数・・・!

Session4

登壇者:プロトソリューション 比嘉 由紀さん
「プログラム未経験の私がプログラムと出会って人生激変した話」
プログラミング未経験の方にも希望を与え、現役の方も共感できる発表内容でした!
堂々と発表されてて、めっちゃかっこよかったです!!

Session5

登壇者: 株式会社 Solafune 光武 亨さん
「衛星データで地球をハックせよ!」
地球上のあらゆる事象をソフトウェアで制御可能にする。というMissionにロマンを感じました!

Session6

登壇者:UZABASE 小玉 祐輝さん
「Webアクセシビリティを身近にする」
プロダクトのアクセシビリティを高める為の施策や考え方を発表して頂きました!
私自身アクセシビリティに対して意識する機会が少なかったので勉強になりました!

Session7

登壇者:プロトソリューション レッティグ・セバスチャン・ペーターさん
テーマ「サーバーレスアプリケーションの開発とデプロイIaCを含む、スマートな環境構築の旅」
最先端の技術を用いた環境構築の方法を発表されていました!皆様、興味深々!!

Session8

登壇者:株式会社Alpaca Lab 棚原 生磨さん
テーマ「起業&スタートアップで働くという選択肢」
企業立ち上げの経験談をお話頂けて、これから起業を目指している方にはぴったりな内容でした!
実績を出す為の取り組み内容がとても勉強になりました!AIRCLE私も使ってます!!

Session9

登壇者:ちゅらデータ株式会社 真嘉比 愛さん
テーマ「国内におけるAIの最先端事例紹介~2022年のトレンド予測を添えて~」
AIビジネス導入に関する課題や責任、最先端事例が聞けて難しい問題もありますがワクワクする内容でいっぱいでした!

Session10

登壇者:沖縄科学技術大学院大学(OIST)船井 正太郎さん
テーマ「一人一人に寄り添う文章が書けるAIを目指して」
文章を数値化し、学習させたAIがアウトプットした内容を人に理解させる事が出来るか?という実験結果や現在挑戦されている実験内容を発表されていて、QAエンジニアの私としては検証に近い実験のお話だったので興味深い内容でした!

Session11

登壇者:株式会社 クアンド 西 孝幸さん
「クラウドで手軽に始めるモダンなモニタリング」
マイクロサービス普及に伴う課題への取り組み内容をお話して頂きました!学ぶべき部分が多かったです!



参加者LT

全てのSessionが終わりまして(登壇者の皆様お疲れ様でした!!)、続いてはLT大会に移ります!

まずはCBcloud株式会社の新垣 雄志さんです!データ構造に着目した観点での発表でした!

続いてお二人目!UZABASE 二木 拓也(にっきー)さんです!
テスト駆動開発を認知~実践する中での気づきを発表して頂きました!

最後の登壇者の方です!サイボウズ株式会社 西原翔太さんです!
圧倒的な宣伝力でコミュニティのご紹介をされていて、聴き入ってしまいました!!

LT登壇者の皆様、本当にお疲れ様でした!!!



パネルディスカッション

続いてが最後の催し、パネルディスカッションです!!みんなで「沖縄テックの未来シナリオを考えよう!
画像左側から・・・・
<モデレーター>
株式会社Link and Visible 豊里 健一郎さん
<パネラー>
プログラマー テスト駆動開発者 和田卓人さん、沖縄科学技術大学院大学(OIST) 船井 正太郎さん
UZABASE 林 尚之さん、プロトソリューション 仲濱 政治さん

テーマ①「多様化するエンジニアの働き方」

やはりお話の中心はコロナ禍に対する影響ですね!フルリモートへの切り替えはスムーズに行えており、海外やフリーランスのエンジニアの方とお仕事する機会は増え、通勤時間・移動費用が無くなった等のプラスの話題もありますが、コミュニケーションに関しての課題があり、出社する機会も作る等の工夫をされている方もいるようです!
コミュニケーションのコツという所で、GatherVirbela等のバーチャルオフィス空間のサービスを利用されているなんてお話もされてて使ってみたいなーと思いました!

他にもテキストコミュニケーションのハードルを下げる(考えて文字を打たせない)文化を作る事で生の声を聞き取れる事が出来るようになる。絵文字を増やして感情のリアクションのバリエーションを増やすのもあり。というお話が出ており、凄く共感しました!※私もチームメンバーに対して出来るだけテキストコミュニケーションのハードルを下げられるように意識している。

テーマ②「これから活躍するエンジニアに求められること」

まず、沖縄IT産業の年間売上高は年々右肩上がりになっているが全国の労働生産性の順位としてはワーストになっているようです。。※悲しい
そういう背景も含め、県内で求められる人材像のアンケートを取った所以下の人材が上位に入っているようです!

・システム全体を俯瞰して思考できる人材
・上流工程の技術力を持つ人材
・最新技術を持つ人材

また県外の方から見ると沖縄のエンジニアはしっかり仕事をしてもらえるイメージがあり、可能性を感じているという声もありました!※素直にうれしい♡

Tech系のコミュニティに積極的に参加していき、求められる人材に近づきたいと思いました!

テーマ③「沖縄の未来をどう描いていく?」

コロナの影響でどこにいてもプログラミングが出来る状況が整備されており、沖縄という土地は魅力的だと思うので未来は明るい(人が集まりやすい)!ただ技術の教えを乞う(誰に聞けばよい?)機会が土地柄的に少ないのでコミュニティに積極的に参加し師匠(教えを乞える人)を見つけたり、技術を磨いていく必要はある。という話題で盛り上がっていました!土地の魅力に甘えず、自立性をしっかりと上げていこう!!



最後に

ディスカッションQ&Aも盛り上がりつつ、Tech BASE Okinawa の全プログラムが終了しました!
最初から最後まで勉強になりっぱなしでした!!参加応募総数も200名以上になり、大成功で終了しました!

今回このようなイベントに開催出来た事は沖縄全体に良い影響を与えられたのではないかと思います!
そして本イベントに参加された方はもちろん、運営チームの皆様本当にお疲れ様でした!!
次回の開催をお楽しみに!!!!

(沖縄経済同友会 第4回ひとづくり委員会講演の様子 2021年12月20日)


2021年12月20日(月)、DIPプロジェクトの一環として沖縄経済同友会のひとづくり委員会にて、講演をさせていただきました。

テーマ:男女ともにキラキラ輝ける職場環境へ
登壇者:デジタルマーケティング部門 執行役員 上間 瑠美子
      Webマーケティング部 津嘉山 亜里沙
      コールセンター部 小嶺 節子
      管理部 松村 賢
      メディア事業部 玉城 久子

「誰もが働きやすい職場環境づくりについて」考えるきっかけとなるべく、沖縄県内における仕事と家庭(家事・育児)の両立についての現状・課題や、プロトソリューションの取組事例や受賞歴、他社さまが職場環境改善に取り組む際のポイント、アフターコロナに向けた組織マネジメントについて、当社の取組み内容を紹介いたしました。

■講演の様子

プロトソリューションは、働きがいのある職場 地域No.1を目標に掲げ、男女問わず活躍できる会社を目指し様々な取組みを行っております。

毎年4月に実施の新卒社員向け人事研修。

研修で学んだことをアウトプットするために、新卒社員は人事研修のフィナーレとして役員・事業責任者向けに自分達の企画プレゼンを実施!

「この企画をやり遂げたい!」という熱い想いで、研修用の企画を実行に移した新卒社員お二人をご紹介します!

yuta

yuta

メディア事業部グー沖縄 Yuta

2021年度プロトソリューションに新卒社員として入社。
学生時代にしていた接客のアルバイト経験から、相手との対話を通して役に立てる仕事がしたいという気持ちが強くなる。

グーの営業の特徴でもある「課題解決型」の営業なら、これまでの自分の経験を生かして働けると思い、入社を決意。

mizuki

mizuki

コールセンター部 Mizuki

2021年度プロトソリューションに新卒社員として入社。
コールセンター部に配属後、オペレーターとしてグーサポートコールチームに所属。
高校時代に部活動でマネージャーをした経験から、人の役に立つ仕事がしたいと思うようになる。

コールセンターでのサポートなら全国で困っている人の役に立つことができると思い、入社を決意。

■新卒社員が挑戦した企業理念・企業目標の実現

プロトソリューション(以下PS)は「データとテクノロジーで人々に感動を届け 地域・社会に貢献する」という経営理念のもと、企業目標である「KANDOU COMPANY 感動カンパニー」を掲げ、お客さまや社員・地域・社会へ感動を届ける企業を目指しています。

新卒社員向け人事研修では、企業理念・企業目標を実現出来るビジネスパーソンへと成長するために、まずはビジネスパーソン・PS社員としての考え方やビジネスマナー・モラル、基本的な仕事の進め方などを身に付けます。

そして人事研修のフィナーレを飾るのは役員・事業責任者向けプレゼンテーション!

プレゼンテーションに向けて、新卒社員はどのような企画であれば自分達を取り巻くステークホルダーに貢献できるのか考えました。

結果、新卒社員が生み出した企画が「CYCY事業×清掃活動=社会貢献」

プレゼンテーションでは、役員・事業責任者を前に堂々と熱く自分達の想いを語った新卒社員。

幾つか指摘はありつつも、役員・事業責任者からは高評価を得ました。

そして人事研修は終了。

部署配属後は自部署の仕事に集中するため、教育担当者は内心「これまで通り企画実行の機会はないだろうな・・・」と思っていました。

が、なんと!新卒社員は企画実行に向けて動いていたのです!

■CYCY事業×清掃活動=社会貢献の実行

<企画の内容>
環境やボランティアなどを専門にしている大学の学部や、ボランティア活動を行っているサークル・学生団体の方々と協力し、CYCYステーションやその周辺を中心に月2回程のクリーン活動を行う。というもの。

ボランティア活動を行っているサークル・学生団体の方々とゴミを拾う新卒社員

清掃ルートを歩きながら落ちているゴミを集めていきます。

1回目は16.8kg、2回目は8kgのゴミを回収しました!

新卒社員並びに、この企画に賛同し一緒に活動する大学生の意識の高さに仲座もKANDOU!

また、彼らの企画に込めた想いは役員へも伝播し、KANDOUの輪が広がっています!

回収したゴミの重さを測る新卒社員のYuta

■企画を実行した2021年度新卒社員2名+CYCY事業責任者にインタビュー♪

jun

jun

CYCY事業責任者 Jun

2012年に沖縄へ移住し、現プロトソリューションへ入社。
不動産メディア「グーホーム」の立ち上げ・事業化に成功後、新規事業企画・立案を担うメディア事業推進室の責任者へ。

2019年10月にシェアサイクル事業『CYCY(サイサイ)』を立ち上げる。沖縄県内に90ステーションを展開。現在も拡大中!

仲座
仲座
お二人のプレゼンテーションを聞いた時、事業責任者のJunさんはどう感じましたか?
素直におもしろいと思いました。CYCYは環境負荷軽減も狙っている事業なので、ステーションを中心にその地域をクリーンにする活動はとても大事だと思います。せっかく提案してくれたので形にしてあげたいと思いました。
Jun
Jun
仲座
仲座
部署配属後、新卒社員はご自身の業務もあって思うように行動できない時もあったと思います。彼らが動けない時、どのようなサポートをしましたか?
基本的には2人に任せていましたが、先方に連絡するタイミングがちょっと遅いかな、、って事も正直ありましたので、都度「こうしたら?」ってメッセージを投げかけて、彼らがなるべく活動に集中できるように、いつでもフォローに入れる状態は作っていましたね。
Jun
Jun
仲座
仲座
企画のきっかけは?(なぜこの企画にしようと思ったのか等)
CYCYの自転車はメンテナンスを定期的に行っているが、自転車のかごの中にゴミが捨てられていたりと、ステーションやその周辺等の清掃までは手が行き届いていませんでした。そこを改善したいねとYutaさんと話し合い、案をだしていきました。
Mizuki
Mizuki
研修中に携わったCYCYで、一定のステーションに見られる汚れや、ゴミの放置などの清掃活動に整備が行き届いていない状況でした。この先、人に愛されるサービスになるためにはここは改善が必要だと思い、Mizukiさんと話し合いを重ねた結果、この企画になりました。
Yuta
Yuta
仲座
仲座
プレゼン後、直ぐに部署配属となったので、企画を進める時間を取るのは中々難しかったと思います。実現までにどのようなことをしましたか?苦労話(あれば)などを含め教えてください。
二人の時間が合わず、ほぼチャット上だけでやり取りをしていたので難しい部分はありましたが、それぞれ役割分担をして進めることで何とか実施することができました。
Mizuki
Mizuki
先方への提案、やり取りなど、初めての経験がたくさんあり、自分にできるのか不安もありましたが、Junさん、Mizukiさんのサポートのおかげで開催することができました。
Yuta
Yuta
仲座
仲座
この企画を最後までやり遂げることが出来た要因は?
人事研修中にCYCYを通して学んだ、お客様目線を意識しつつ、CYCYを多くの方に知ってほしい・気持ちよく利用してほしいという思いがあったのでYutaさんとともに頑張ることができました。
Mizuki
Mizuki
計画を任せていただいたので、なにがなんでもやり遂げようと思い、Mizukiさんのサポートもあったので、頑張ることができました。
Yuta
Yuta
仲座
仲座
今後も活動は継続予定ですか?ビジョンなどあればお聞かせください。
今後は、より多くの社員・学生の方々に参加していただき、地域貢献のため、CYCYのブランディングのためにも継続していきたいと思います。また、学生と社会人が交流できる場としての意味合いもあるので、社員の皆様のご参加お待ちしております!
Mizuki
Mizuki
継続していきたいと思っています。まだ規模は小さいですが、今後はたくさんの学生や、社員の方々にも参加いただけるような大きなイベントにしていきたいです。
Yuta
Yuta

社員一人ひとりが輝くSTARとなるように!

これからも新卒社員の活動を全力応援致します!

icon_仲座

icon_仲座

この記事を書いたひと:仲座 紀子(なかざ のりこ)
株式会社プロトソリューション 沖縄本社人事 人材開発担当(キャリアコンサルタント)

「社員一人ひとりが持っている宝石を発掘し輝かせるお手伝いがしたい!」という想いを胸に自ら講師として登壇。更にテーマや目的に合わせて外部講師や専門知識のある社員への登壇依頼など、バラエティに富んだ人材開発に取り組んでいます。

icon_cycy


icon_cycy


株式会社プロトソリューションが2019年10月より開始したシェアサイクル事業です。ICTを活用し、地域に根ざしたシェアサイクル事業を行うことで、観光客の利便性向上を図り、交通渋滞緩和、環境への配慮を目指します。なお、本サービスは、OpenStreet株式会社が提供する自転車シェアリングシステム「HELLO CYCLING」を活用して行います。

沖縄のシェアサイクル CYCY(サイサイ)はこちら


株式会社プロトソリューション(本社:沖縄県宜野湾市、代表取締役:白木 享)は、沖縄県中頭郡中城村と協働してシェアサイクル事業を実施する運びとなり、2022 年 12 月 22 日(水)より、中城村役場を始めとする新規ステーションを開設いたします。

■ 新設ステーション情報

12 月 22 日に中城村内に以下 12 ステーション、ラック数 119 台分にて稼働をスタートいたします。

・サンエーなかぐすく店 10 台分
・中城城跡 10 台分
・護佐丸歴史資料図書館 10 台分
・中城村役場 9 台分
・山内原公園 6 台分
・石橋原公園 10 台分
・ちゅらばる公園 10 台分
・ゆらてぃく公園 10 台分
・竹口原公園 10 台分
・南上原糸蒲公園 14 台分
・赤森原公園 10 台分
・南坂田原公園 10 台分

※新規投入する自転車の台数は 50 台を予定しております。

ステーション例

■ 本協働の目的

ICT を活用した全ての交通手段による最適な移動を一元的なサービスとして提供する MaaS(マース:Mobility as a
Service)の一環となる取組み、公共交通の機能の補完・代替、地域の活性化や観光振興等に資する新たな都市の交
通システムとしてのシェアサイクルの有効性及び課題を検証することを目的としております。

<8.働きがいも経済成長も>地方の文化振興・産品販促に繋がる持続可能な観光業を促進するための取組み
<9.産業と技術革新の基盤をつくろう>誰もが利用しやすいインフラの提供、クリーン技術・環境に配慮した仕組みの提供
<11.住み続けられるまちづくりを>公共交通機関の補完、誰でもが容易に利用できるプラットフォームの提供
<17.パートナーシップで目標を達成しよう>産学官連携で効果的なパートナーシップ形成をはかり、目的を実現する

■シェアサイクル「CYCY」について

シェアサイクル事業CYCY(サイサイ)

株式会社プロトソリューションが2019年10月より開始したシェアサイクル事業です。

ICTを活用し、地域に根ざしたシェアサイクル事業を行うことで、観光客の利便性向上を図り、交通渋滞緩和、環境への配慮を目指します。

なお、本サービスは、OpenStreet株式会社が提供する自転車シェアリングシステム「HELLO CYCLING」を活用して行います。

沖縄のシェアサイクル CYCY(サイサイ)の料金・概要はこちら

■「HELLO CYCLING」について

HELLO CYCLING

 「HELLO CYCLING」は、事業者や自治体向けのシェアサイクルプラットフォームです。「HELLO CYCLING」を活用したシェアサイクルサービスの利用者は、「ステーション」の検索から自転車の利用予約、決済までの一連の手続きをスマートフォンやパソコンで簡単に行うことができます。また、「ステーション」であればどこでも自転車を返却することができます。「HELLO CYCLING」の詳細はこちら(https://www.hellocycling.jp/)をご覧ください。「HELLO CYCLING」を提供するOpenStreet株式会社は、Zコーポレーション株式会社、ソフトバンク株式会社、ENEOSイノベーションパートナーズ合同会社、双日株式会社が出資しています。

【HELLO CYCLING プラットフォームについてのお問い合わせ先】
OpenStreet株式会社 houjin_support@hellocycling.jp



【株式会社プロトソリューション】
代表者 :代表取締役社長 白木 享(しらき とおる)
本社 :沖縄県宜野湾市大山7-10-25 プロト宜野湾ビル
設立 :2007年4月3日
事業内容:デジタルマーケティング事業、ITインテグレーション事業、ユーザメディア事業、
コミュニケーションサポート事業、人材支援事業
URL :https://www.protosolution.co.jp/

■ 本リリースに関するお問い合わせ先
株式会社プロトソリューション メディア事業部 広報 玉城 久子(たまき ひさこ)
TEL : 090-9262-4102
Mail : h-tamaki@protosolution.co.jp

こんにちは。編集部の福田です。

脱炭素社会へ向けてカーボン・オフセットの取り組みをすることになって2か月。
少しずつではありますが、業務と並行しながら推し進めているところであります。

プロトソリューションでは将来的に、温室効果ガス排出を実質ゼロであるカーボン・ニュートラルの状態を目指し、再生可能な社会作りを目指します。詳しくは前回、前々回の記事を読んでね^^

前回のあらすじ
プロトソリューションで測定した年間の二酸化炭素排出量は●●トン!!それってどのくらいなんだろう??

当社の年間二酸化炭素排出量が918.77トン。それを年間800トンに抑えるべく、電気を消すというシンプルな取り組みを実行していきます。

■電気を消す取り組みの前に

さて、実際に会社の使われてない無駄な電気を消していくわけだが、電気を消すことでどれくらいの効果が見込めるのか?

電気事業者別排出係数※を使って、1本あたりの蛍光灯が1時間でどれだけのkwhを出しているのか算出してみた。

※電気事業者別排出係数とは、契約している電力会社の排出係数に使用したkwhをかけることで、二酸化炭素の排出量を知ることができるもの

32ワットと書いてあるのが見える


蛍光灯に印字されているワット数を調べてみると、、

32ワットと記載されている。

単純にこの32ワットの蛍光灯×本数(使われていない無駄な電気)で出たkwhの数値が二酸化炭素排出量になる。

年間で119トンを削減するには月に10トン減らす必要があるので、10トンに近い数値が出てくれたら嬉しい。

果たして、電気を消すことで無駄な電気の総量が何トンくらいになるのか?

■使用していない電気の調査

とはいえ、無作為に電気を消しまくるのは良くない。

始めに、会社内で散見される“使わない場所”での電気、いわゆる“無駄な点灯”をしている場所を調べてみることにした。

まあ、普段から節電を意識している私からすれば、会社のどこに無駄な電気が使われているかを把握するなど朝メシ前のブランチ後。

さっそく私の頭の中で把握している怪しい場所へ向かってみることに。

①4Fリフレッシュルームのテレビ

社員がお昼休みに利用するリフレッシュルーム


「ほら、やっぱりね。テレビの消し忘れ、多いんだよね。」

ここは社員がランチをしたり、談笑をしたりするリフレッシュルーム。

沢山の人が利用するので、フロアの電気やテレビの電源の消し忘れが多いのである。

ご覧の通り、誰もいないのにテレビだけがついている。これだと、見られる為に存在するテレビも悲しくなるよね。

誰も観ていないのでテレビを消す福田


使い終わったらちゃんと消さなきゃ。

テレビの消し忘れ。これこそ“無駄な点灯”のひとつ。

<排出係数:132.6kwh/年> ※1日10h付いていた場合


②4Fリフレッシュルームフロア

これもよくある光景。ミーティングをしている人がチラホラいるけど、奥のスペースは無人の様なので消すことに。

奥のスペースは誰もいないのに点灯している
フロアの入り口付近にあるパネルで点灯・消灯の操作できる
フロアのスペース毎にで番号が振られているので確認して消灯する。きれいな指です。


使い終わったらちゃんと消さなきゃ。

使わないスペースの電気は消しましょう


フロアスペースの電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:2,218kwh/年 32W 136本> ※合計136本を2h削減した計算


③男子ロッカー

男子ロッカーに誰もいないのに電気が点いている


「おいおい、、誰のために点けておいてるんだ?そんな優しさは要らないよなぁ~。」

ロッカールームを出る前に指で「ポチッ」とやるだけだ。

地球に優しい男はモテるぜ。次回から頼む!

消してスッキリしたのか、満足気な笑みを浮かべる福田


男子ロッカーの電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:65.2kwh 32W4本> ※合計4本を2h削減した計算


④4Fロッカー

まるで「ロッカー売り場」のように、照明でディスプレイされているではないか

「おやおや、ロッカールームならぬロッカー売り場に迷い込んでしまったようだ。」

誰もいないのに、ここでも無駄な電気が使われているみたいですね。

これだけロッカーがズラリと並んでいると、確かに異様な雰囲気なので電気を点けておきたくなる気持ちは分かるけど、これも無駄な電気なので消しましょう。

「電気はロッカーのためにあるんじゃないぜ。人のためにあるんだ。」

4Fロッカーの電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:114.2kwh 32W7本> ※合計7本を2h削減した計算


⑤湯沸室

湯沸室はかなりの頻度で無人点灯しているのを見かける


ここは会社の中でも、頻繁に電気の消し忘れが多い場所のひとつ。

私もよく湯沸室の前を通るので、「ポチッ」と代わりに消しています。

最後に使った人はきちんと電気を消して出ましょうね。(もちろん各階にある給湯室も忘れずに!)

ポチッと消す動作は、何故か爽快な気持ちになれる


湯沸室の電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:16.2kwh 32W1本> ※1本を2h削減した計算


⑥1Fロッカールーム

デスクに戻ろうと歩いていた福田の目に映ったもの。

「なんと! ここでもか!!!?」

精神が崩壊し、映画『プラトーン』のポーズになる福田


気分爽快から数秒後にこの光景を目の当たりにすると、さすがに情緒がおかしくなってしまいそうです。

「もう、蛍光灯もロッカーも数が多過ぎるんだよーーーー!!!!!」

『過ぎたるは猶及ばざるが如し』。
これならロッカーも蛍光灯も無くしたほうが良いのでは? と、乱暴なことを言ってみる。ダメ?

1Fロッカールームの電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:97.8kwh 32W6本> ※合計6本を2h削減した計算


⑦ミーティングルーム

まさかと思い、ミーティングルームをのぞいてみる


1Fロッカールームの真向かいにあるミーティングルームから灯が見えている。

中をのぞいた感じ、誰もいないようだ。

福田を突き動かすのは使命感だけである
しばらく落ち込んで佇む福田


「やっぱり、、、誰も使っていないかぁ。はぁ~、、。」

ミーティングルームの電気の消し忘れ。これも“無駄な点灯”のひとつ。

<排出係数:97.8kwh 32W6本> ※合計6本を2h削減した計算

■無駄な電力の数値結果は?

さて、使用していない電気の調査をすべく、当社ビルの4F~1Fを回って来た結果が以下の通り。

①リフレッシュルームのTV 132.6kwh
②リフレッシュルームフロア 2,218kwh
③男子ロッカー 65.2kwh
④4Fロッカー 114.2kwh
⑤湯沸室 16.2kwh
⑥1Fロッカールーム 97.8kwh
⑦ミーティングルーム 97.8kwh
合計:2,742kwh

沢山の場所でこれだけの無駄な電気が使われていることが判明した。
そし合計値のkwhを排出係数に置き換えると。。。?

2,742kwh × 排出係数 = 約2トン

(2トンを分かりやすくすると、同僚家庭の1年間の消費電力と同じ!)

人差し指でポチッと消すだけで、大体ひと家庭分の年間の消費電力が抑えられるんですね~!

明日から社員皆で使われてない無駄な電気を「ポチッ」っと消していくよう努めていきたいところです。

と言っても、なかなか簡単にはいかないもの。

まずは皆の意識を向けることから始めていかないと難しいかな。

やっぱり、一人でやるよりも大勢でやったほうが取り組みとしての効果も大きいよね。

「よし。やるぞ。」

さっきまで落ち込んでいたのに、急に走り出す福田


年間の二酸化炭素排出量を800トンまで抑えるべく、使われてない無駄な電気の場所と数値は分かった。

次は“電気を消す”取り組みをどうやって浸透させていくか?

次回の記事は・・・
「取り組みの成果を倍増させるアクションを考えてみる」

icon_福田

icon_福田

この記事を書いたひと:福田 聡樹(ふくだ さとき)

株式会社プロトソリューション Webマーケティング部所属。自社ホームページ編集長。ブログ/インタビュー/動画などのコンテンツを使ってプロトソリューションの取り組み、サービスやタレント情報の発信をしています。
好きなもの:爬虫類全般、犬全般、本のにおい。


はじめまして。プロトソリューション AIテクノロジー推進室の新垣佑樹です。
ラクネコのカスタマーサクセスを担当しています。
今回は私のストーリーをご紹介いたします。

新卒採用でプロトソリューションへ入社

私は沖縄のIT系専門学校を卒業後、新卒でプロトデータセンター(現・プロトソリューション)へ入社しました。

高校卒業後、大学進学を考えていましたが当時は行きたい学部が無く、仕事するならIT系?Web?と漠然としたイメージがあったのでIT系の専門学校へ入学しました。

就職活動の際、いくつかピックアップした企業の中に高校生の頃から眺めていたグーネットを発行しているプロトコーポレーションのグループ会社である株式会社プロトデータセンター(現・株式会社プロトソリューション)があり、ご縁に感謝しつつ就職を決めました。

入社当時はテストチームで教育を行っていて、サービスや会社の業務知識を学びながらWebやスマートフォンアプリのテストを担当しました。

その後、Web開発チームへ移動し、様々な案件を通じてPGからPL/PMまで経験しました。

沖縄から東京へ

入社から半年が経過したころWeb開発チームに移動した私に東京出張の話を頂きました。

大型の基盤システムのリプレイスがあり、東京のベンダー企業へ入り込んで武者修行するという話でした。

高校生の頃から吟味していた車の納車待ち…友達いない…東京の人怖い…

でもこのように大きなプロジェクトに携わる機会は無さそう。なんとかなる…!

というようなことを数秒考え、東京出張を決意しました。

(車は父も好きな車で嬉しそうに乗り回してくれたので、少し親孝行ができました。笑)

東京ではたくさんの方にお世話になりました。

今思い返してみると引くほど激務だったのですが、当時は「何がなんやら。この人達について行くしかない」という事だけを考えていました。複数のベンダーが集結し開発していたプロジェクトですが、そんな中でも開発者間の助け合いや、重たい課題をどう乗り越えるか、深夜まで続く話し合いは今でもいい経験だったと感じます。

そのプロジェクトもなんとかゴールすることができ、エンジニアの底力を目の当たりにしました。

ラクネコのカスタマーサクセスと今後について

Webサービスで様々な案件を経験した後、現在はラクネコという自社サービスのカスタマーサクセスを担当しています。

▼ラクネコに関してはこちら▼

一般的にカスタマーサクセスとは、サービスを通じお客様の課題を解決し、お客様を成功に導くことをミッションとしています。(イメージ:ラクネコで受付コストを削減→お客様は浮いたコストを別のところに投資→”お客様の事業活性化”)

ラクネコは今とても勢いに乗っており、ありがたいことに日々、導入頂く企業数が増えています。

“受付”ということもあり業界を縛らず、一般の企業だけでは無く、工場や美容室など様々な業界で利用が始まっています。

ラクネコを担当する以前(Webの開発を担当していた頃)は、要望をもとに作り上げることに重きをおいていましたが、カスタマーサクセスを担当し、どうやってサービスが活用されているのかを考えるようになりました。

提供する側が思いつかないような使い方をお客様がイメージしている事もあり、また、ラクネコを良くする為のヒントも多くあります。

要望やイメージを吸い上げ、サービスを良くする。サービスを利用しお客様の課題が解消され、よりお客様が事業を良くする。

私自身まだまだ未熟ですが、こういった循環をイメージしながらカスタマーサクセスができれば理想的と考えてます。

最後に

今回はざっくり私の経歴と今の役割について紹介させて頂きました。

また機会があれば、要所を絞って学んだことや経験談を紹介できればと思います。

プロトソリューションでは多くの事業を行っています。その為、隣を見れば全く違うことをやっていたり、幅広く対応しているオールラウンダーもいれば、専門性に特化して1つのことに集中している人もいます。

多種多様な人が集まっている会社だと思うので、他のストーリーも見て頂き、少しでも興味を持った方は応募いただけると嬉しいです!

最後までお読みいただき、ありがとうございました。

このたび、株式会社プロトソリューション(本社:沖縄県宜野湾市・仙台市)と東北公益文科大学(山形県・酒田市)は、2021年12月15日に、包括的な連携のもと、相互の発展並びに地域の活性化に資することを目的とし、包括連携協定を締結いたしました。

■ 協定の目的

東北公益文科大学の地域課題及び課題解決に関する研究・人材育成等の知見と、プロトソリューションのIT技術・知見を融合し、東北地方における「地域課題解決への新しい貢献」を行うこと、「地域のITリテラシーの向上、IT及びIT技術の活用」を推進することを目的としています。

■ 東北公益文科大学学長  神田直弥様からのコメント

Society 5.0時代となり、AIやビッグデータの活用を通した問題解決が非常に重要になっている。本学では教員・学生ともさまざまな形で地域課題解決のために取り組んでいるが、地域全体のITリテラシーの向上が一つの課題となっている。今回の協定に基づいて、IT技術を活用した地域の付加価値向上に貢献できれば、と期待している。

■ 株式会社プロトソリューション ITインテグレーション部門 執行役員 鈴木鋭明からのコメント

東日本大震災から10年となり、若手社員を中心に地域課題解決のために何か取り組めないか、と検討してきた。東北地区のお客様との対話から、地域課題の共有と発信の重要性を感じている。公益大の地域課題解決の取り組みと弊社のIT技術を連携させることにより、東北をさらに盛り上げていきたい。

■ 今後の展望

庄内地域をフィールドの一つとして、具体的な地域コミュニティの課題解決プロセスに両者が参画をすることにより、新しいソリューションを提供することを目指します。

■ 酒田キャンパスで行われた締結式の様子

執行役員 鈴木 鋭明

執行役員 鈴木 鋭明

執行役員 鈴木 鋭明

この度、東北公益文科大学様との包括連携協定を締結させて頂きました。今後東北公益文科大学様と協議を進め、地域課題の解決、社会貢献の一つの形として、我々のITの技術を融合させたソリューションを一緒に考えていければと思っております。宮城、山形、そして東北全体で、次世代を担う若者がこういった取り組みに賛同し、地域社会全体で活気ある街づくり、そして新たなビジネスに繋げていければと考えております。

AIテクノロジー推進室仙台 部長 進藤 貴臣

AIテクノロジー推進室仙台 部長 進藤 貴臣

AIテクノロジー推進室仙台 部長 進藤 貴臣

この度は、東北公益文科大学様との包括連携協定という有り難い機会を頂戴しましたこと、大変に光栄でございます。また、東北公益文科大学の卒業生である大石が < JomoNeX(ジョモネックス)> を通じて、母校はもとより地域の皆様に際してお力添えできる機会を創れたことがなによりでございます。東北公益文科大学様の地域課題及び課題解決に関するご経験と知見、当社のIT技術を駆使し、更には地域の皆様と力を合わせ、将来的には「東北から世界をよりよく!」そんな夢に想いを馳せながら、山形・東北のよりよい街づくりに貢献していく所存でございます。

AIテクノロジー推進室仙台 大石 桃菜

AIテクノロジー推進室仙台 大石 桃菜

AIテクノロジー推進室仙台 大石 桃菜

母校である東北公益文科大学様とこのような連携協定を締結させて頂いたことを大変嬉しく思っておりますし、これから始まる東北公益文科大学様との新たな連携関係・取り組みに期待が膨らんでおります。 東北公益文科大学様が持つ地域課題解決の手法や、庄内地方という広大なフィールド、そして活発に活動なさっている学生のお力と、弊社が持つITのノウハウ・テクノロジーを融合させ、地域課題解決への新たなソリューションを生んでいければと考えております。4年間お世話になった大学、そして庄内地方に恩返しをするつもりでこの取り組みを推進して参ります。

■ JomoNeX(ジョモネックス)について

jomonex

地域課題を運営とユーザーがともに解決する CtoC マッチングサービス「JomoNeX(ジョモネックス)」は、2021年8月にリリース。埋もれがちな地域課題をオープンにし、その課題に協働していくことで「新しい地方創生」の実現を目指します。移住者による起業支援やビーチクリーンなどのコンテンツは30件を超え、地域課題を解決したい・解決して欲しいユーザー数は38名(2021年12月時点)となっており、地域課題の可視化とコミュニケーションの場として拡大しています。

jomonex

■ JomoNeX サービスに関するお問い合わせ先

株式会社プロトソリューション AIテクノロジー推進室仙台 JomoNeX担当 大石(おおいし)

お問合せ先 https://jomonex.jp/contact

はじめに

前回のブログ記事では、FastAPIで画像内容を判定できるAPIを作成しました。そのAPIは、CloudFormationのテンプレートでAWS LambdaとElastic Beanstalkにデプロイしました。

今回のブログ記事では、AWS CodePipelineを使ってCI/CDプロセスを実装することで、そのAPIのデプロイを自動化します。

自己紹介

私はアダムと申します。PROTO SolutionのAIテクノロジー推進室で機械学習/深層学習のシステムやプロトタイプを開発しております。

主な仕事は、TensorFlowを使った深層学習モデルの開発と、それらを使ってAmazon Web Services (AWS)にデプロイできるAPIやバッチアプリケーションの開発です。

CI/CDとは

Continuous Integration (CI)

Continuous Integrationとは、開発者が行った変更をソースリポジトリのメインブランチに可能な限り頻繁にマージすることです。

これにより、ソースコードを結合する時間が短縮され、リリース前に他の開発者のアプリケーションの変更をマージすることで発生する問題を軽減することができます。

開発者がコードをメインブランチにマージするたびに、自動ユニットテストや統合テストが実行され、自動的にテストされます。

Continuous Delivery/Deployment (CD)

Continuous Delivery/Deploymentとは、アプリケーションの変更をテスト環境や本番環境に自動的にデプロイするプロセスです。

このプロセスのすべてのステップが完全に自動化され、人の介入を必要としないのが理想です。

ただ、CI/CDの導入する前に下記の導入も重要だと考えています。

●新機能を別々のブランチで開発し、リリースのためにメインブランチにマージするワークフローです。
●ビルドおよびデプロイメントパイプラインのさまざまな段階で実行可能な自動テストです。
●クラウドサービスを使用している場合、アプリケーションが実行されるインフラが自動的に立ち上がる方法です。
●インフラにアプリケーションを自動的にデプロイする方法です。
●新しいカラムの追加や参照データの挿入など、データベースの変更を管理するための自動化されたプロセスが存在することも理想的です。

CI/CDに向けたAWSサービス

AWSでは、CI/CDパイプラインを実装するための様々なサービスが提供されています。以下に主なサービスを紹介します。

AWS CodeCommit

CodeCommit は、AWSにホストされているGitリポジトリです。GitHubのようなサービスです。

AWS CodeBuild

CodeBuild は、ソースコードをコンパイル・ビルド・テストできるAWSのサービスです。

AWS CodeDeploy

CodeDeploy は、CloudFormation、ECSとLambdaに向けたデプロイメントのサービスです。Blue/Green デプロイなど機能を提供しています。

AWS CodePipeline

CodePipeline は、ビルドとデプロイのプロセスの全体的なフローを定義します。

CI/CDフローの実装

先に紹介したAWSサービスを使ってCI/CDのフローを実装します。

プロジェクトの要件に応じて必要なステップと技術が異なる場合もあると思いますが、CI/CDのフローは最低限でも下記に載っているステップが必要だと思います。

1,開発者は、ソースコードをCodeCommitにpushします。
2,CodePipelineは、CodeCommitのソースコードが更新されたたびに、最新のソースコードを取得します。
3,CodePipelineは、CodeBuildにソースコードを渡します。CodeBuildは、ソースコードをテスト・パッケージし、ECRにアップロードし、タグを付けます。アップロードしたイメージのURIをアウトプットします。
4,CodeCommitにあったCloudFormationテンプレートを実行します。最新のイメージをデプロイするために、CodeBuildで作成したイメージのURIにCloudFormationテンプレートのURIパラメーターを書き換えます。CloudFormationで開発環境のリソースをデプロイします。
5,承認を得るまで待ちます。
6,承認された場合、ステップ4と同じように本番環境のリソースをデプロイします。

サンプルコードには含まれていませんが、以下のタスクをフローに追加することを強く勧めます。

●自動ユニット・インテグレーションテストの追加
●デプロイ後、APIへの自動システムテストの追加
●Gitにビルドに使ってたソースコードにタグを付けます
●コード静的分析、コードカバレッジのレポート生成

これらのタスクのどれかが失敗したり、コードが一定の品質レベルを満たしていない場合、ビルドは停止します。

CodePipelineの構築

このフローを実現するために、フローのステップをCloudFormationのテンプレートで定義します。

CloudFormationのテンプレートでCI/CDフローに必要なAWSリソースを見てみましょう。

ユーザーが入力可能なパラメータ

ユーザーが入力可能なパラメータを定義しましょう。このような情報をパラメータとしてテンプレートに入れることで、テンプレートを変更することなく、他のプロジェクトで再利用することができます。

ほとんどのリソース名をApplicationName (アプリケーション名)のパラメータに基づいて決定します。また、ソースコードを取得したいブランチや、DockerイメージをアップロードしたいECRリポジトリの名前を指定できるようにします。

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  ApplicationName:
    Default: SampleApi
    Type: String
    Description: Enter the name of your application
  CodeBuildImage:
    Default: 'aws/codebuild/standard:4.0'
    Type: String
    Description: Name of codebuild image to use.
  BranchName:
    Description: 'The name of the branch to deploy from.'
    Type: String
    Default: 'main'
  ImageRepository:
    Description: 'The name of the ECR repository where images are stored.'
    Type: String
    Default: 'test'

CodeCommitリポジトリ作成

ユーザーが入力したApplicationNameの元にリポジトリの名前を設定し、作成します。

SourceRepository:
 Type: 'AWS::CodeCommit::Repository'
 Properties:
   RepositoryName: !Ref ApplicationName
   RepositoryDescription: !Sub 'Source code for ${ApplicationName}'

CodeBuildのジョブ

Dockerイメージをビルドし、ECRにアップロードするためにCodeBuildのプロジェクトを作成します。

こちらに設定された環境変数はビルドのコンテナ内でアクセスできます。

AppPackageBuild:
 Type: 'AWS::CodeBuild::Project'
 Properties:
   Artifacts:
     Type: CODEPIPELINE
   Environment:
     ComputeType: BUILD_GENERAL1_SMALL
     Image: !Ref CodeBuildImage
     Type: LINUX_CONTAINER
     PrivilegedMode: True
     EnvironmentVariables:
       - Name: REPOSITORY_NAME
         Value: !Ref ImageRepository
       - Name: AWS_DEFAULT_REGION
         Value: !Sub '${AWS::Region}'
       - Name: AWS_ACCOUNT_ID
         Value: !Sub '${AWS::AccountId}'
   Name: !Sub '${ApplicationName}Build'
   ServiceRole: !GetAtt
     - CodeBuildRole
     - Arn
   Source:
     Type: CODEPIPELINE


buildspec.yaml

デフォルトでは、CodeBuildのプロジェクトは、buildspec.yamlというファイルの中のコマンドを実行して、アプリケーションをパッケージします。このファイルの内容を説明します。

version: 0.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - ECR_URL=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
      - REPOSITORY_URI=$ECR_URL/$REPOSITORY_NAME
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_URL
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - BUILD_TAG=$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}')
      - BUILD_LABEL=build-$BUILD_TAG

ビルドの事前準備です。ECRのリポジトリにログインし、ビルドの番号を作成します。次のステップにこれを使う予定です。

  build:
  commands:
    - echo Build started on `date`
    - echo Building the Docker image...
    - docker build -f Dockerfile.lambda -t $REPOSITORY_URI:latest .
    - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$BUILD_LABEL
    - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$COMMIT_HASH
    - printf '{"ImageUri":"%s"}' $REPOSITORY_URI:$BUILD_LABEL > image.json
    - cp deploy/lambda.yaml deploy.yaml

buildspec.yamlの主要部分です。Dockerのイメージにソースコードをパッケージします。イメージにバージョンのタグを付けます。最後にイメージURIをファイルにアウトプットします。

  post_build:
  commands:
    - echo Build completed on `date`
    - echo Pushing the Docker images...
    - docker push $REPOSITORY_URI:latest
    - docker push $REPOSITORY_URI:$BUILD_LABEL
    - docker push $REPOSITORY_URI:$COMMIT_HASH
artifacts:
files:
  - image.json
  - deploy.yaml

ビルド後の処理です。DockerのイメージをECRにアップロードします。CodePipelineでの次のステップに利用するファイルをartifactsに指定します。

CodePipeline

こちらからCodePipelineのフローを定義します。まずは、CodePipelineの名前と必要なRoleを設定します。

  AppPipeline:
  Type: 'AWS::CodePipeline::Pipeline'
  Properties:
    Name: !Sub '${ApplicationName}Pipeline'
    ArtifactStore:
      Type: S3
      Location: !Ref ArtifactBucketStore
    RoleArn: !GetAtt
      - CodePipelineRole
      - Arn

StagesのところにCodePipelineのステップを定義します。

最初のステップは、CodeCommitからソースコードを取得するステップです。

      Stages:
      - Name: Source
        Actions:
          - ActionTypeId:
              Category: Source
              Owner: AWS
              Version: 1
              Provider: CodeCommit
            Configuration:
              BranchName: !Ref BranchName
              RepositoryName: !GetAtt
                - SourceRepository
                - Name
            OutputArtifacts:
              - Name: SourceRepo
            RunOrder: 1
            Name: Source            

その次のステップは、以前に定義されたCodeBuildのプロジェクトを参照し、ソースコードをビルドするステップです。

CodeBuildがビルドした成果物(DockerイメージのURIとCloudFormationのテンプレート)がBuildArtefactsに保存されています。それは次のステップに参照できます。

        - Name: Build
        Actions:
          - InputArtifacts:
              - Name: SourceRepo
            Name: CodeBuild
            ActionTypeId:
              Category: Build
              Owner: AWS
              Version: 1
              Provider: CodeBuild
            OutputArtifacts:
              - Name: BuildArtefacts
            Configuration:
              ProjectName: !Ref AppPackageBuild
            RunOrder: 1

CloudFormationのテンプレートで開発環境デプロイに向けた変更セット(Change Set)を作成します。

変更セット(Change Set)では、テンプレートが実際に実行される前に、どのリソースが作成、変更、削除されるかを確認することができます。

デプロイする前に先ほどECRにアップロードしたDockerイメージのURIをCloudFormationのテンプレートに書き換えます。デプロイするテンプレートのパスは、BuildArtefactsに保存したCloudFormationのテンプレートに設定します。

        - Name: Development
        Actions:
          - ActionTypeId:
              Category: Deploy
              Owner: AWS
              Version: 1
              Provider: CloudFormation
            InputArtifacts:
              - Name: BuildArtefacts
            Name: CreateDevelopmentChangeSet
            Configuration:
              ActionMode: CHANGE_SET_REPLACE
              ChangeSetName: !Sub '${ApplicationName}DevelopmentChangeSet'
              RoleArn: !GetAtt
                - CFNDeployRole
                - Arn
              Capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
              StackName: !Sub '${ApplicationName}DevelopmentStack'
              TemplatePath: 'BuildArtefacts::deploy.yaml'
              ParameterOverrides: |
                {
                  "ImageUri": {"Fn::GetParam": ["BuildArtefacts", "image.json", "ImageUri"]}
                }
            RunOrder: 1

次に、前のステップで作成した変更セットを実行し、実際に開発環境へのデプロイを行います。

            - RunOrder: 2
            ActionTypeId:
              Category: Deploy
              Owner: AWS
              Version: 1
              Provider: CloudFormation
            Configuration:
              StackName: !Sub '${ApplicationName}DevelopmentStack'
              ActionMode: CHANGE_SET_EXECUTE
              ChangeSetName: !Sub '${ApplicationName}DevelopmentChangeSet'
              OutputFileName: StackOutputs.json
            Name: ExecuteChangeSet
            OutputArtifacts:
              - Name: AppDeploymentValuesDevelopment

開発環境へのデプロイが完了したら、次は本番環境に同じパッケージしたイメージをデプロイします。

開発環境のように変更セットを作成し、DockerイメージのURIをCloudFormationのテンプレートに書き換えます。

        - Name: Production
        Actions:
          - ActionTypeId:
              Category: Deploy
              Owner: AWS
              Version: 1
              Provider: CloudFormation
            InputArtifacts:
              - Name: BuildArtefacts
            Name: CreateProductionChangeSet
            Configuration:
              ActionMode: CHANGE_SET_REPLACE
              ChangeSetName: !Sub '${ApplicationName}ProductionChangeSet'
              RoleArn: !GetAtt
                - CFNDeployRole
                - Arn
              Capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
              StackName: !Sub '${ApplicationName}ProductionStack'
              TemplatePath: 'BuildArtefacts::deploy.yaml'
              ParameterOverrides: |
                {
                  "ImageUri": {"Fn::GetParam": ["BuildArtefacts", "image.json", "ImageUri"]}
                }
            RunOrder: 1

本番デプロイが行われる前に、チームリーダーなどの承認が得られるまでデプロイを停止する承認ステップを追加します。 このステップでは、変更セットが実際に実行される前に変更セットの詳細を確認することができます。

            - Name: DeploymentApproval
            ActionTypeId:
              Category: Approval
              Owner: AWS
              Version: 1
              Provider: Manual
            Configuration:
              NotificationArn: !Ref ApprovalTopic
              CustomData: 'Please approve the change set to allow deployment.'
            RunOrder: 2

最後のステップでは、実際に本番環境にデプロイを行ないます。

            - Name: ExecuteChangeSet
            ActionTypeId:
              Category: Deploy
              Owner: AWS
              Version: 1
              Provider: CloudFormation
            Configuration:
              StackName: !Sub '${ApplicationName}ProductionStack'
              ActionMode: CHANGE_SET_EXECUTE
              ChangeSetName: !Sub '${ApplicationName}ProductionChangeSet'
              OutputFileName: StackOutputs.json
            OutputArtifacts:
              - Name: AppDeploymentValuesProduction
            RunOrder: 3

テンプレートの残りの部分は、CodePipelineとCodeBuildのプロジェクトに権限を付与する周りです。

こちらにテンプレート全体を確認してください

Code Pipelineのデプロイ

先に定義したCode Pipelineのテンプレートを実行するには、以下の手順を行います。

1,CloudFormationのコンソールを開きます 。
2,利用したいリージョンを選択します。
3,Create Stack With new resources (standard) 「スタックの作成 (新しいリソース)」を選択します。
4,テンプレートファイルのアップロードを選択します。
5,deploy/pipeline.yamlのパスを入力します。(Next)「次へ」をクリックします。
6,テンプレートに必要なパラメータを入力します。
1,Stack Name。 今から作成するスタックの名前です。例:「ImageNetPipeline」。
2,ApplicationName。アプリケーションの名前です。多くのCodePipelineに入っているリソースはこの名前の元に作る予定です。
3,BranchName。どのブランチからソースコードを習得します。
4,ImageRepository。ECRのリポジトリの名前です。
7,(Next) 「次へ」をクリックします。
8,画面下部のチェックボックスをすべてチェックします。
9,(Create Stack)「スタック作成」をクリックします。



初めてのビルドとデプロイ

テンプレートのデプロイ後、CodeCommitリポジトリにコードが存在しないため、Code Pipelineは失敗状態になります。

ソースコードをpushすると、Code Pipelineのビルドが自動的に始まります。

ビルドが無事に完了するとCloudFormationで開発環境を立ち上がってDockerのイメージをデプロイします。

その後、本番環境へのデプロイのステップに入り、ビルドは停止し、承認が得られるのを待ちます。

リリースが承認されると、ビルドが続行され、本番環境へのデプロイも完了します。

最後に

この記事では、AWSのCI/CDに向けたサービスを使い、自動ビルドとデプロイのフローを実現できました。

このパイプラインは出発点として使用されるべきで、プロジェクトの要件に合わせてステップの追加や削除、フローの変更を自由に行うことができます。

ソースファイル

このプログ記事で使ったソースファイルをGitHubに公開しました。

buildspec.yaml – CodeBuildが利用されたbuildspec.yamlファイル
Dockerfile.lambda – Lambdaのデプロイに向けたDockerfile
deploy/lambda.yaml – Lambdaのデプロイに向けたCloudFormationのテンプレート
deploy/pipeline.yaml – CodePipelineのデプロイに向けたCloudFormationのテンプレート

最後までお読みいただき、ありがとうございました。

AIエンジニア

AIエンジニア

沖縄本社では、一緒に働くAIエンジニアを募集しています

システムエンジニア、その他多数募集中!

※掲載許可をいただいております

沖縄県広報誌「美ら島沖縄」12月号において、環境に優しい交通として、シェアサイクル事業「CYCY(サイサイ)」を取り上げて頂きました。

身近で環境に優しい交通手段として、ぜひシェアサイクルをご活用ください。

・沖縄県広報誌「美ら島沖縄」とは

「美ら島沖縄」は、県政についての情報や、県内各地域の情報をわかりやすく県民の皆様に伝えるための雑誌です。

・配布場所

沖縄県広報誌「美ら島沖縄」は、公共機関や学校、銀行、病院などで閲覧できます。
また、沖縄県の出先機関の一部(行政情報センター、県税事務所、福祉事務所、保健所、土木事務所など)や沖縄ファミリーマート各店舗、ゆいレール各駅、イオン各店舗で無料配布しています。

ページトップへ戻る