派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

第5話 プッシュ済みのコミットを取り消したい!リバートの使い方【連載】マンガでわかるGit ~コマンド編~

f:id:itstaffing:20191021120210j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

前回の 第4話 では、コンフリクトの解決方法を学びました。

・コンフリクトした箇所を修正して、コミットしなおす

$ git commit -m

・コンフリクトした箇所が多すぎて修正が難しい場合、マージを中止する

$ git merge --abort

今回の第5話では、特定のコミットを打ち消すコマンド「リバート」について学びます。機能としてはシンプルなので、初心者でも使いやすいうえに、いざというとき便利なコマンドです。このマンガを通して、わかばちゃんと一緒に知識を身につけていきましょう!

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

コミット済みの内容を、あとから取り消したい!

f:id:itstaffing:20191021120213j:plain
f:id:itstaffing:20191021120216j:plain

このマンガのように、コミット済みの内容を取り消さないといけない場合、どうしたらいいか分からず、あわててしまったことはありませんか?

Gitにはコミットした内容を取り消す方法がいくつかありますが、まずは一番安全で簡単な「リバート」を習得しましょう。

リバートしてみよう

リバートは、指定したコミットと逆の内容をコミットしてくれます。
コマンドは、たったこれだけです。

& git revert [打ち消したいコミットID]

ちなみに、リバート(revert)は英語でいうと、「元に戻す」という意味です。

▼ リバートすると、このようにコミットメッセージ編集画面になります

f:id:itstaffing:20191021120219j:plain

▼ 編集する必要がなければ、Escキーを押してから「ZZ」と入力することで確定されます。 見事、リバートコミットが作られました

f:id:itstaffing:20191021120221j:plain
f:id:itstaffing:20191021120224j:plain
f:id:itstaffing:20191021120146j:plain
f:id:itstaffing:20190617145538j:plain
git revert 、マスターしたよ!これでいくら間違えても大丈夫だね。
f:id:itstaffing:20190617145541j:plain
って、おいおい……。さすがにこの履歴は読みづらいよ。
f:id:itstaffing:20191021120148j:plain

f:id:itstaffing:20190617145538j:plain
た、確かに…。そういえば、さっきリバート以外にも取り消せるコマンドはあるって言ってたよね。そっちを教えてよ!
f:id:itstaffing:20190617145541j:plain
ん~、リセットか……。リセットはちょっと危険だから初心者には教えないようにしているのだが、リフログと一緒に覚えてもらえば……。ブツブツ
f:id:itstaffing:20190617145538j:plain
ブツブツ言ってないでさっさと教えなさい!それでも大学教授なの!?
f:id:itstaffing:20190617145541j:plain
前から思っていたのだが、いつの間にか上下関係逆転してないか?
★魔王教授のコラム

リバートが便利なのは、プッシュ済みのコミットを打ち消したいとき。プッシュ済みのコミットは、そのまま上に新しいコミットを乗せる形で「打ち消し」を行えるからだ。

一方、次回説明するリセットは、コミットそのものを消去してしまう強力なコマンドだ。すでに他のメンバーがそれを親としてコミットを重ねてしまっているときにリセットをしてしまうと、他のメンバーがプッシュ不能になってしまう。それもそのはず、あるはずの親がいなくなっているからだ。

というわけで、初心者の頃は無理せずリバートを使うことをオススメする。リセットは、Gitに慣れてきたら習得していこう。

まとめ

さて、ここまででコミットを打ち消す方法がわかりました。

・特定のコミットを打ち消す

& git revert [打ち消したいコミットID]

コミットの歴史を改変するのではなく、新しくコミットが上に積まれるだけなので安心して使えるコマンドです。

Gitにはまだまだたくさんのコマンドがあります。
次回、第6話では git reset(リセット)について学んでいきましょう。

▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」

【イベントレポート】使いやすいAI(人工知能)「IBM Watson」を見てみよう!

この記事では、2019年8月7日に開催したイベント「使いやすいAI(人工知能)「IBM Watson」を見てみよう!」をレポートします。機械学習に先鞭をつけたIBM Watsonは、AIサービスの先駆け的存在として、日々進化を続けており、機械学習やディープラーニングを用いたアプリケーション開発で使う開発者も増えています。

今回のイベントではWatsonの基礎から実際の利用まで、書籍『現場で使える! Watson開発入門』の共著者であり、共にIBM チャンピオンの肩書を持つ羽山祥樹さん、樋口文恵さん、江澤美保さんの3名が、デモなどを交えながら分かりやすく解説してくださいました。

■今回のイベントのポイント
・Watsonはクラウドサービスとして提供されている
・ダッシュボードを使うと、あっと言う間に簡単なチャットボットがつくれる
・質問に対する回答を、大量の文書の中から自動的に見つけ出す
・さらには、蓄積したデータも分析できる

【講師プロフィール】
羽山 祥樹さん
2016年よりIBM Watsonに携わる。専門はユーザーエクスペリエンス、情報アーキテクチャ、アクセシビリティー。翻訳書に『メンタルモデル──ユーザーへの共感から生まれるUX デザイン戦略』『モバイルフロンティア──よりよいモバイルUXを生み出すためのデザインガイド』(いずれも丸善出版)がある。

樋口 文恵さん
SI企業に入社後、8年間をインフラエンジニア、ネットワークエンジニアとして、お客様先でのネットワーク構築、コンサル業務に従事。2017年1月にAI専任のエンジニアになりWatsonに携わる。リリースをサポートしたチャットボットは50本以上。

江澤 美保さん
株式会社クレスコ AIサービスエバンジェリスト。2015年よりIBM Watsonに携わり、経営層へのWatson導入提案を多く経験。現在は企業のAI導入支援を手掛けるAIコンサルタント・エンジニアとして活動中。2016年3月「第2回 IBM Watson日本語版ハッカソン」にてアイディア賞受賞。

データ学習の結果から判定をするWatson

初めに、羽山さんが人工知能の初歩からIBM Watsonの基礎までを解説。「Watsonは、わかりやすく手軽に使えるAI。言葉で説明するより、まずはお見せします」とお話しされ、デモを見せてくださいました。

デモは、Watsonに「只今Watsonテスト中、本日は晴天なり、本日は晴天なり」という音声ファイルを渡すと、自動的にテキスト化してくれるというもの。音声ファイルを指定し、わずか4行のコードをコピーして、Watsonに送るとテキストが返ってきます。これはWatsonが音声を認識し、文脈を解析してテキスト化してくれたことを示しています。

このようにWatsonは、データをわたすと、あらかじめ与えておいた学習データをもとに、回答をしてくれます。

AIというと、犬と猫の画像を、データ学習の結果から判別するというプログラムが話題になりましたが、IBMのデモサイトにはタイヤの写真を与えると、そのタイヤがパンクしているかどうかまでも判定をする、というプログラムの例(Visual Recognition)があるそうです。

f:id:itstaffing:20191015105617j:plain
▲データ学習の結果から、写真に写っているタイヤがパンクしているかどうかを判定してくれる

Watsonはクラウドサービスとして提供されています。実際には、単一のソフトウェアでなく、モジュールで構成されており、その集合体のブランド名が「Watson」とのこと。

Watsonは、IBM Cloud上から使うことができます。ライト・アカウントを選べば、クレジットカードの登録をしなくても利用でき、一部制約はあるものの無料で使えるそうです。

Watson Assistantでチャットボットをつくってみよう

次に樋口さんが、Watsonがどれぐらい手軽に利用できるかを示すため、その場で簡単なチャットボットの作成デモを見せてくださいました。

まずは「Watson Assistant」と呼ばれる、Watsonのダッシュボードを利用します。

f:id:itstaffing:20191015105620j:plain
▲IBM Cloudにアクセスしたあと、カタログからAIをクリックし、「Watson Assistant」を選択。リージョンは「東京」、プランは「ライト・プラン」を選択する

Watson Assistantの画面では「Assistants」と「Skills」が選べますが、Assistantsは高度であるため、今回はSkillsを使いました。

f:id:itstaffing:20191015105623j:plain
▲Create Dialog Skillを設定していく。このSkillひとつが、1つのチャットボットになるというイメージ。いくつも作れる

まず、あいさつを覚えさせます。「Entities」で「Create Entity」を選び、あいさつEntityを作成し、「Add Value」をクリックして、「こんにちは」に類する言葉を続けて入力していきます。

このとき、「Fuzzy Matching」をONにしておくと、1文字程度のミスタイプは許容してくれるそうで、たとえば「Hello」を「Hallo」とタイプした場合も、正しく返事を返してくれるそうです。

次にチャットボットが話す言葉を覚えさせます。

f:id:itstaffing:20191015105626j:plain
▲「Create dialog」を選び、「ようこそ」と書かれた四角(これをノードと呼ぶ)をクリックし、チャットボットに表示する最初のメッセージを入力する

f:id:itstaffing:20191015105558j:plain
▲次に「ようこそ」のノードを右クリックして、メニューから「Add nodes bellow」を選び、ノードを追加し、返事を登録する。このとき「Multiple conditioned responses」をONにしておくといろいろな返事を返すようになる

これらの入力を終えたら、画面右上の「Try it」をクリックして試します。

f:id:itstaffing:20191015105601j:plain
▲チャットボットの動作を、その場で確認できる

なんと、あっと言う間に簡単なチャットボットが完成。イベントに参加されていた皆さんも、Watsonのスゴさを実感されていました。

続いて、より複雑な、質問の意味を考えるチャットボットの作成に移りました。手順が複雑であるためここでは割愛しますが、先ほどの「Assistants」でなく、今度は「Intents」を使います。

f:id:itstaffing:20191015105604j:plain
▲「Create intent」を選び、質問を覚えさせる。ここでは「#予約する」と「#購入する」というキーワードを登録する

f:id:itstaffing:20191015105606j:plain
▲返答として「予約する」では予約ページを、「購入する」では購入ページを、それぞれ案内するように設定する

「Intents」を使うことで、登録した語句に完全一致しない質問でも、きちんと回答することができました。さらには、漢字でも、ひらがなでも問題はありません。「買い物がしたい」という質問にも、間違うことなく購入ページを案内していました。

樋口さんによれば「類義語を20~30種類ぐらい登録して、トレーニングさせるといいかも」とお話しされました。そしてこのあと、あらかじめ用意された本格的な会議室予約のデモを披露してくださいました。

Watson Discoveryで分析と検索をしてみよう

次に、大量の文書を検索したり分析したりする「Discovery」という機能について、江澤さんが解説してくださいました。

Discoveryとは、文書内からエンティティ(単語と人名/場所/会社名などタイプのペア)やエンティティ同士のリレーション(関係性)、といったメタ情報を抜き出し、高度な情報検索を実現してくれるプラットフォームだそうです。

f:id:itstaffing:20191015105609j:plain
▲文章から場所(カナダ・モントリオール)をエンティティとして抜き出し、リレーション(この場合located)も発見してくれる

Discoveryが作成してくれるメタ情報は、それだけではありません。キーワードやカテゴリ、そして、その文書の内容がポジティブかネガティブかというセンチメントなども判別して、それらもメタ情報として追加するそうです。

f:id:itstaffing:20191015105611j:plain
▲特別なトレーニングをしなくても、このようなメタ情報を付加してくれる

こうしたメタ情報や全文検索機能を活用して、質問に対する回答を、大量の文書の中から見つけ出したり、蓄積したデータを分析したりすることができます。

先ほどのAssistantとDiscoveryの使い分けとしては、よくある質問には「Assistant」、たまに聞かれる質問は「Discovery」が担うということが、一般的な使い方だそうです。ちなみに、AssistantでカバーできないときDiscoveryに聞きに行く、という機能も実装されているとのことでした。

これらのメタ情報は、Watson Knowledge Studio(WKS)という機能を使うと、カスタマイズすることもできるそうです。

このあと、実際の文書を例に、キーワードの抽出、カテゴリの分類、センチメントをどう判断するのかなど、メタ情報がどのように付加されるのかをデモしてくださいました。

f:id:itstaffing:20191015105614j:plain
▲実際の文書から、どのようなメタ情報が付加されるのかをデモ

参加者の方からは「Watsonが、手軽にAIサービスを構築できるプラットフォームだということが良くわかりました」「取り掛かりの機会となったのが、ありがたい」などの声をいただきました。ライト・アカウントで手軽に試せるのも魅力ですね。株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。

【イベントレポート】RPAの基本から導入の実務まで~RPA未経験者でもOK~

この記事では、2019年7月26日に開催したイベント「RPAの基本から導入の実務まで~RPA未経験者でもOK~」をレポートします。解説書『絵で見てわかるRPAの仕組み』の著者である西村泰洋さんに、RPAの基礎、そして導入するにあたっての注意点を教えていただきました。

■今回のイベントのポイント
・日本市場におけるRPAの導入は2015年から
・RPAとは「自分以外のソフトウェアを対象に、定義された処理を実行するプログラム」
・導入に成功している企業には必ず「しくみ」がある

【講師プロフィール】
西村 泰洋さん
富士通株式会社 フィールド・イノベーション本部 金融FI統括部長。デジタル技術を中心にさまざまなシステムと関連するビジネスに携わる。著書に『絵で見てわかるRPAの仕組み』『図解まるわかり サーバーのしくみ』『RFID+ICタグ システム導入・構築 標準講座』(以上、翔泳社)『図解入門 最新 RPAがよ~くわかる本』『デジタル化の教科書』(以上、秀和システム)『成功する企業提携』(NTT出版)がある。

RPA導入の歴史

最近、RPAという言葉をよく耳にします。業務の効率化を推進する技術だということは知っているけれども、詳しくはわからないという方も多いのではないでしょうか。

そこで西村さんは初めに、RPAという分野が一体いつ頃に登場したのかを解説してくださいました。

まず大手企業が2015年ぐらいから部門での導入やPoC(概念実証)を開始し、2016年度あたりから銀行や金融、製造業などで全社的な導入に着手し始めたそうです。準大手企業は少し遅れて、2016年度あたりから部門での導入やPoCが始まり、2017年度には全社導入を検討する企業が増え始めたとのこと。自治体や公共機関は、さらにその後を追う形で、2017年度に研究や予算確保をスタートし、2018年度あたりから導入が始まったそうです。

f:id:itstaffing:20191007134232j:plain

▲日本市場におけるRPA導入の歴史

西村さんは「システム開発時のテスト業務に自動化ツールを使っていたので、RPA自体には驚きませんでしたが、一般の業務に使うということにはビックリしました」と、ここ数年での活性化には驚いたそうです。

RPAはどんなソフトウェア?

そもそも、RPA(Robotic Process Automation)とは、どのようなソフトウェアを指すのでしょうか。

西村さんによれば「自分以外のソフトウェアを対象に、定義された処理を実行するプログラム」のことを指すそうです。この「自分以外のソフトウェアを対象に」というところが重要であると説明されました。

これはどういうことかというと、Wordは自ら文書を正すことができ、業務アプリケーションは自らデータの登録や処理をすることができますが、RPAは“自分に対してできることがない”ということです。

また、「自分以外のソフトウェア」は1つでも複数でも問題はないので、複数のシステムソフトウェアの操作を並行してできるベテラン社員のような作業も、RPAにはできてしまうそうです。

処理の定義は、開発者(RPAソフトウェアのユーザー)が行うので、開発者は、実際の業務を熟知しておく必要があるそうです。

これらの説明をされたあとに、RPAソフトの構成や種類についての紹介がありました。ここでは、RPAソフトの種類について興味深かったことをご紹介します。

AccessやSQL Server、Oracleなど、データベースを規模や用途によって使い分けているように、RPAツールも目的や規模に応じて使い分けるそうです。「3種類ぐらいを組み合わせて使っている」のが一般的だと西村さんはお話しされました。

製品として、国産のWinActorやBizRobo!、UiPathが人気だそうです。

・WinActor、WinDirector
・BizRobo!
・UiPath
・Automation Anywhere
・Blue Prism
・Kofax Kapow
・NICE
・Pega

上記はいずれも商用製品ですが、フリーで使えるRPAソフトも今は流通しているとのことでした。

また、RPAソフトの認定資格というものもすでにあり、なかには無償で取得できるものがあるそうなので、勉強するからには…と考えている方は、挑戦してみてはいかがでしょうか。

ロボット開発の手順

RPAの定義、つまりロボットの開発は難しいのでしょうか。その点も西村さんが実演を交えながら解説してくださいました。

まず「プログラミングスキルは必要か?」という疑問に対しては、「経験は必要ない。ただし、構造化という発想が必要」とのこと。業務のルールを見出し定義していく過程で、繰り返しや条件分岐のようなものは使うそうです。

RPAソフトの種類によって、ロボット開発の方法が変わります。現在、RPAソフトは次の3つの種類に分けられるそうです。

・画面キャプチャタイプ
・オブジェクトタイプ
・プログラミングタイプ

また、1つのRPAソフトが1つのタイプしか持たないわけではなく、多くの製品が複数のタイプを持っているとのことでした。

「先輩から教わると、その先輩の好きなロボット開発のタイプが選ばれてしまいますが、たいてい、同じソフト内にはもう1つのタイプも用意されているということを覚えておくといい」と西村さんはお話しされました。

次に、国内で人気のWinActorや、海外でも使われるKofax Kapow、Pega、Blue Prismという4製品についての具体的なロボット開発も紹介してくださいましたが、ここでは割愛します。

プログラミングと同様で、設計→開発→単体テストという手順は、RPAでも変わらないので、プログラマがRPAのロボット開発へ移行するのは、それほど難しくなさそうです。

ただし、PC操作の可視化という重要な作業が発生します。ここがRPAのロボット開発で難しい部分かもしれません。

PC操作の可視化

オフィスにおける日常業務は、手順に関する資料が存在しないことが多く、先輩社員から後輩社員に口頭で伝えられ、属人化しているケースも少なくありません。RPAのロボットプログラミングをするに当たり、まずはこの業務を可視化する必要があります。

可視化の手法としては、インタビュー、調査票、調査員による観察などが挙げられます。きちんと手順を書き起こすと長大なリストになってしまうので、RPAを使いたいところにマークを入れて、そこを中心に見ておくことがポイントだそうです。また、使いたいところのPC操作の可視化には、Windowsに搭載されているステップ記録ツール(PSR)を使います。

また、機能要件と非機能要件、システム全体の性能、セキュリティなど、現場の個人が要求しない部分についても、きちんと検討しておく必要があり、ワークシートによる作業手順の整理や、フローチャートによる確認なども必要です。

導入に際しての注意点

西村さんによれば、RPAの導入に失敗している企業と成功している企業があり、「成功している企業には必ずしくみがある」のだそうです。

f:id:itstaffing:20191007134235j:plain

▲部門がしっかり分かれており、それぞれの業務の範囲も明確に分けられている

それは利用部門、管理部門、IT部門などの体制が整備されていること。それにより導入の際の、エンジニアの作業や担当窓口なども明確になります。

f:id:itstaffing:20191007134238j:plain

▲開発・導入に当たって、どの部署がどの部分の担当なのかが明確になり、作業もスムーズに行える

現在は、RPAのロボット開発をプログラマが担当することも多いのですが、今後は事務スタッフの活躍領域になってくることが予測されます。ExcelやWordが使えるレベルから、次第にマクロが使えるレベルが求められるようになったのと同様に、今後は「RPAの定義が行える」というスキルが求められるかもしれません。

「RPAについては自信がない」という方も、まずはフリーのソフトを使い、どのようなものであるかを試してみてはいかがでしょうか。株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。

第4話 コンフリクトは怖くない!解決方法【連載】マンガでわかるGit ~コマンド編~

f:id:itstaffing:20190925144740j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

第3話 では、2つのブランチを統合するマージコミットの作り方と、その仕組みを学びました。

$ git merge [ブランチ名]
(マージする)

今回の第4話は、コンフリクトについてです。なにそれ…と思われる方も、このお話しを通して、わかばちゃんと一緒にコンフリクトについて学んでいきましょう。

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

マージ中にコンフリクトが発生したら

f:id:itstaffing:20190925144742j:plain

コンフリクト解決!の練習

1.まずは、わざとコンフリクトさせてみよう

第3話 と同じように、新しいブランチ「news」を作り、newsブランチとmasterブランチでそれぞれのコミットを作りましょう。自分がnewsブランチで作業していたら、その間に別の人がmasterブランチを更新していたという想定です。

前回と違うのは、わざとコンフリクトさせるために同じ行を編集することです。
 
▼ newsブランチにチェックアウトした状態で、sample.txtをこのように編集してコミット

f:id:itstaffing:20190925144744j:plain

▼ masterブランチにチェックアウトした状態で、sample.txtをこのように編集してコミット

f:id:itstaffing:20190925144747j:plain

では、マージしてみましょう。
マージするためのコマンドは、

$ git merge [統合したいブランチ名]
 
でしたね。

newsブランチからmasterブランチへ取り込みたいので、masterブランチにチェックアウトしたうえで、

$ git merge news
 
と打ち込みます。

すると、マージは行われず、このような文章が表示されるはずです。

f:id:itstaffing:20190925144750j:plain

f:id:itstaffing:20190617145541j:plain
よし!コンフリクト成功だな。
f:id:itstaffing:20190617145538j:plain
あはは、コンフリクト成功っていうのもおかしな話だね。
英語でも恐れることはありません。翻訳してみましょう。

CONFLICT (content): Merge conflict in sample.txt
→コンフリクト:sample.txtの中でマージの衝突が起きました

Automatic merge failed; fix conflicts and then commit the result.
→自動マージが失敗しました。衝突している箇所を修正して、その結果をコミットしてください
f:id:itstaffing:20190617145541j:plain
何をすればいいかは基本的にGit様がこうやって親切に教えてくれるから、その通りにすればよい。
 
2.ファイルを開いてコンフリクトを修正する
 
では、sample.txtを修正するためにファイルを開いてみましょう。

f:id:itstaffing:20190925144752j:plain

f:id:itstaffing:20190617145538j:plain
うわっ、なんか変な記号が書き込まれてる!
 
f:id:itstaffing:20190617145541j:plain
変な記号とは失礼な!これはGit様が目印として書き込んでくれたのだ。
<<<<<<< HEAD
から
======= まで:
→今自分がチェックアウトしているブランチでの変更

=======
から
>>>>>>> news まで:
→取り込もうとしたブランチでの変更
 
f:id:itstaffing:20190617145541j:plain
修正するときはこの記号も合わせて消すようにな。Git初心者だと、この記号がなんなのかわからず、消さずにそのままコミットしてしまいがちだ。
f:id:itstaffing:20190617145538j:plain
ギクッ……! えっと、今度のハイキングは雨天決行なんですよね。
じゃあnewsブランチの変更内容を残して、と。これでOKですね!

▼ 修正後のsample.txt

f:id:itstaffing:20190925144754j:plain

3.修正したファイルをステージし、コミットしなおす
 
ステージに乗せて

$ git add sample.txt

コミット

$ git commit -m "sample.txtのコンフリクトを修正"
 
f:id:itstaffing:20190617145538j:plain
ふーん、コンフリクトのあとは普通にコミットするだけでいいんだ。これでうまくマージできたね!コンフリクト、怖くなかった!

▼ マージが成功している(SourceTreeで表示したコミットツリー)

f:id:itstaffing:20190925144757j:plain

コンフリクトの修正が難しい場合

f:id:itstaffing:20190925144759j:plain
コンフリクトの箇所が多すぎて、修正が難しい場合、マージの途中であっても--abortオプションでマージを中止できます。
 
$ git merge --abort
 
あまりにも差分が多すぎる場合は、どちらか一方のブランチのコミット内容が、最新のコミット内容に比べ極端に古いことが多いです。その場合は、最新のコミットから新たにブランチを作って、そこに自分が追加したいコードを加えるといいでしょう。

まとめ

さて、ここまででコンフリクトの解決方法がわかりました。

・コンフリクトした箇所を修正して、コミットしなおす

$ git commit -m
(通常のコミットと同じコマンドです)
 
・コンフリクトした箇所が多すぎて修正が難しい場合、マージを中止する

$ git merge --abort
(マージを中止する)

これでコンフリクトが起きても、落ち着いて対処できますね。

Gitにはまだまだたくさんのコマンドがあります。
次回は、git revert(リバート)について学んでいきましょう。

エンジニアの皆さん、日々のスキルアップの時間は十分に取れていますか。 リクルートスタッフィングでは、エンジニアのスキルアップを応援するため、登録者限定で情報配信などを行っています。 リクルートスタッフィングでの就業に関わらず使えるものですので、これを機にお役立てください。

リクルートスタッフィング

▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」

【イベントレポート】ゼロから学ぶクラウドの世界 クラウドの現在、未来はどうなるのか?そしてエンジニアは、どう学ぶのか

この記事では、2019年6月26日に開催したイベント「ゼロから学ぶクラウドの世界 クラウドの現在、未来はどうなるのか?そしてエンジニアは、どう学ぶのか」をレポートします。講師には、NRIネットコムのクラウド事業推進部の部長であり、数々のクラウドサービス解説書籍を執筆されている佐々木 拓郎さんをお迎えし、クラウドの基礎から、最新のクラウドの潮流、そしてクラウド関連の知識を養う際に効果的な勉強方法まで、幅広く教えていただきました。

■今回のイベントのポイント
・クラウドの潮流は2つ。「コンテナ化」と「サーバーレスアーキテクチャ」
・隣り合う分野を掛け合わせる「T型人材」という考え方
・クラウドの学び方で重要なのは「具体的な目標設定」

【講師プロフィール】
佐々木 拓郎さん
NRIネットコム クラウド事業推進部 部長。専門はクラウドに関するコンサルティングから開発まで。主な著書として『クラウドエンジニア養成読本』(技術評論社)、『AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト』(SBクリエイティブ)、『Amazon Web Services パターン別構築・運用ガイド』(SBクリエイティブ)、『Amazon Web Services 業務システム設計・移行ガイド』(SBクリエイティブ)、『Rubyによるクローラー開発技法』(SBクリエイティブ)などがある。

クラウドの潮流は2つ

講師である佐々木さんは、アマゾン ウェブ サービス ジャパン株式会社の「APN AWS Top Engineers 2019」と「APN Ambassadors 2019」にも選ばれている、いわばAWSのプロ中のプロ。今回のイベントでは、「クラウドの潮流を何となく把握してもらう」「技術の勉強の仕方のヒントを得てもらう」「家に帰ったら、クラウドのアカウントを作ってもらう」をゴールとし、クラウドについて詳しく佐々木さんに教えていただきました。

現在クラウドには大きく2つの潮流があり、「コンテナ化」と「サーバーレスアーキテクチャ化」という流れがあるそうです。

コンテナ化とは、仮想化の手法の1つで、1つのOS上に独立した仮想的なユーザー空間を作り出し、それをコンテナのようにプラットフォーム上に並べたり、置き換えたりして利用します。

f:id:itstaffing:20190909123538j:plain
▲コンテナ型の仮想化では、1台の物理サーバー上で1つのOSしか動かさないため、ハードウェアリソースを効率良く使うことができる

現在、このコンテナ化を支えているのが、コンテナ型仮想化エンジン「Docker」と複数コンテナを管理するオーケストレーションソフト「Kubernetes」です。

f:id:itstaffing:20190909123521j:plain
▲Dockerでコンテナ型の仮想環境を構築し、複数のコンテナをKubernetesで管理する

一方、サーバーレスアーキテクチャとは、仮想サーバーを利用せずにアプリケーションを構築する設計のことだそうです。ただし、仮想サーバーを利用しないといっても、「ユーザーがメンテナンスすべきサーバーがない」というだけで、そのバックエンドにクラウドベンダーが用意したサーバーがあり、イベント駆動により、各アプリが必要に応じてコンピューターリソースが提供されるという仕組みのことを指します。

f:id:itstaffing:20190909123523j:plain
▲サーバーアプリケーションが1秒間しか起動されなければ、1秒間分の利用料しか課金されずに済む、といった利用も可能になるサーバーレスアーキテクチャ

クラウドの進化に伴った「T型人材」という考え方

このようにクラウドサービスそのものが進化してくると、おのずと、その利用方法や求められるエンジニアのスキルも変わってきます。

これまでは、インフラエンジニアやアプリケーションエンジニアなど、担当する領域が明確にわかれていました。しかし、コンテナ化やサーバーレスアーキテクチャが普及すると、従来の区分ではわけることが出来なくなってきます。

そうなると、エンジニアの境界(領域)も、これまでと違って曖昧になっていきます。そこで登場するのが「T型人材」という考え方だそうです。

T型人材とは、フロントサイド/サーバーサイド開発、インフラ構築、クラウドの種類、ミドルウェアなど、幅広く浅い理解を持ちながら、いずれかの分野について、より深い知識を備えている人を指します。

f:id:itstaffing:20190909123526j:plain
▲広く浅くでも構わないので、周辺の知識を持つことが大切。それがT型人材

佐々木さんは、クラウド時代が進めば、プロビジョニングやオーケストレーションで使われる「Infrastructure as Code」(コードによるインフラの構成管理)のように、コード化する範囲が広がるため、これまで以上にコードが書けるエンジニアが必要とされると予測しています。

もちろんコードが書けるだけでなく、業務知識や技術力など、専門分野あるいは得意分野を身につけていくことが大切だということです。ただし、専門分野/得意分野も、単一の分野で勝負するのは茨の道だといいます。なぜなら「単一分野においては、必ず上の人は、たくさんいるから」だそうです。そこで佐々木さんは、「隣り合う分野を掛け合わせること」をお勧めされました。

f:id:itstaffing:20190909123530j:plain
▲分野を掛け合わせると、ベクトルのように合成された結果で評価される。そうして自分が第一人者になれる分野を作ればよい

コツは「隣接する複数のスキルを身につけること」だそうです。なぜなら「隣接分野だとベクトルが合成されやすい」とのこと。例として、アプリとインフラや、アプリとデザインなどを示してくださいました。

そして、効率的な成長をするためのポイントとして「変化を楽しむ」「ちょっと背伸びをする」「チャンスが来やすい仕組みを作る」を挙げます。チャンスが来やすい仕組みとは「組織内の第一人者の分野を作る、あるいは、やりたい事をアピールしておくこと。そうすると仕事が集まりやすくなる」ということだそうです。

クラウドの学び方

では、自身のスキルセットにクラウドを追加するにあたり、何をどう勉強していけば良いのでしょうか。ここでも佐々木さんが効率的な学び方を示してくださいました。大切なのは「目標の具体化」「教材の選択」「実際に手を動かす」「アウトプットをする」ということ。

中でも重要なのは「目標設定」。たとえば失敗しやすい目標とは「AWSを使えるようになりたい」というもの。「使える」というのが一体どのレベルを指しているのか分かりません。成功しやすい目標は「負荷に応じて自動でサーバーが増減するシステムを作りたい」というような具体的なものだそうです。ただし「目標はあまり高くしない」ことがポイントだそうです。

学習教材については、AWS公式サイトや、いわゆるBlack Beltシリーズと呼ばれる書籍、各種オンラインセミナーなどが紹介されました。分からないことはGoogleで調べるという人もいますが「Googleはキーワードを知らないと調べられない。でも書籍はページをめくれば知らない情報が出てくる」のが利点だそうです。

手を動かして勉強していくときに気を付けなければいけないのは、セキュリティ。たとえばソースの中にAWSへのアクセスキーを直書きしてしまい、そのままGitHubの公開リポジトリにプッシュしてしまうという事故は、よくあるそうです。最近では、そもそもアクセスキーを利用せずに済ませる事ができるので原則使わないことが推奨されています。どうしてもアクセスキーを利用する必要がある場合は、ソースの中にアクセスキーを書き込まず、環境変数を利用する方法が望ましいそうです。

f:id:itstaffing:20190909123532j:plain
▲手を動かして学ぶ際に、最低限押さえておきたいセキュリティ

どうしても不安であれば「セルフペースラボ(Qwiklabs)」の利用がお勧めだそうです。このサービスは、ほぼ無料で、30分間だけAWSやGCPが使えるというサービスです。時間が過ぎると、作成した環境を勝手に消してくれるので、初心者にもお勧めだそうです。

f:id:itstaffing:20190909123535j:plain
▲初心者にも安心して試せる「セルフペースラボ」

ちなみに、アウトプットをすることは敷居が高いように感じますが、気になったキーワードをTweetするだけでも意味があるそうです。

今回のイベントの参加者からは、クラウドの勉強方法が具体的にわかったとの声を多くいただきました。また、「セルフペースラボ」を使って、実際に手を動かして学んでみる方も多いのではないでしょうか。株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。

【インタビュー】元バーテンダーが心がけたのは、いくつかのスキルを併せ持った“スキルプラス”によるキャリア形成

エンジニアとしてのキャリアを考える上で、スキルアップに不安を持つ方は多いのではないでしょうか。株式会社リクルートスタッフィングが運営するITSTAFFINGでは、スキルアップのために努力されている登録スタッフにインタビューをし、普段のお仕事で気を付けていることや、スキルアップのための取り組み方について、定期的にご紹介します。

今回お話をうかがった田中敦士さんは、もともとバーテンダーをしており、友人とコンセプトバーを経営していたそうです。そのまったくの異業種から、ITの世界に飛び込みました。その後、会社の設立や登録派遣などを経て、現在はフリーランスとして活躍中。これらのご経験を経て、心がけていることはなにかを教えていただきました。

f:id:itstaffing:20190909121557j:plain

バーテンダーからインフラエンジニアへ。勘違いが生んだ華麗なる転身

「日本バーテンダー協会にも所属するバーテンダーを6年ほど務めており、友人と一緒に、当時としてはまだ珍しかったコンセプトバーを立ち上げました。スキューバダイビングやサーフィンが好きだったので、コンセプトは『海』。深海をイメージした内装に、BGMは波の音、床には砂を撒いて、雰囲気を出していました」

しかし「一生、飲食をやっていくのは難しい」と考えた田中さんは、バーテンダーの道から離れることを決意した。1995年9月頃だという。

田中さんが転職先として選んだのは、大手通信機器系メーカーのグループ会社で、ちょうど契約社員を募集していた。ITの知識を持ち合わせていなかった田中さんがなぜ?と思うかもしれないが、実は転職先の会社が「〇〇システム建設」という社名だったことから「建設現場の仕事だろう」と勝手に思い込んでいたという。

「配属先に、軍手と作業服を持っていったら、仕事は入力オペレーターというもので、協力会社からヒアリングしてデータを入力し、ファイリングをしていくという業務でした(笑)」

驚くことに田中さんは、このとき初めて本格的にPCに触れたそうだ。しかし、そこから急激な勢いでPCに関する知識やスキルを習得していく。

覚えたExcelやAccessを活用し、顧客に業務改善を提案、推進していくようになる。いつしか田中さんは、顧客はもちろんのこと、勤務先の会社にとっても、無くてはならない存在へと成長していった。もちろん収入も、どんどん増えていったという。

f:id:itstaffing:20190909121600j:plain

会社を立ち上げ、仕事が順調に進んでいく

そのような中、会社から田中さんに、正社員化の打診があった。しかし田中さんは断った。

「業務委託契約を結ぶ契約社員ということもあり、当時の月収は90万円ほど。それが正社員になると5分の1ぐらいになってしまうのが嫌だったんです」

対個人での業務委託契約では上限があったのだろうか、田中さんの事情を理解した同社役員から今度は「田中さん、自分で会社を作れば?」と提案された。そうすれば対法人で業務委託契約ができるという。

結果、田中さんは会社を立ち上げ同社の仕事を続けていった。その後も、大手シンクタンク、コンビニチェーンなどに向けたさまざまな仕事を手掛ける。

「ある自動車メーカーの東京本社におけるシステム構築プロジェクトの仕事を受けました。そこでは、システム管理の責任者を任され、ヘルプデスクの設置や、Notes Dominoを使ったイントラネット環境を構築するなど、さまざまな仕事を手掛けました。3000万円近い予算を承認無しで動かせるのが面白くて仕方ありませんでした」

当時の月収は20代半ばにして150万円に達していたという。と、ここまでならよくあるサクセスストーリーだったかもしれない。しかし、この後、田中さんは大きなアクシデントに見舞われてしまう。

f:id:itstaffing:20190909121603j:plain

体調を崩した後の再スタートは、登録派遣から

トントン拍子に、エンジニアとしてのスキルの幅を広げ、収入を上げてきた田中さんだったが、事故に遭い、うつ病を発症してしまった。

「あの時は本当に大変でした。何をするにも気力が湧かず、思考能力が低下し数字も6までしか数えられなくなってしまったんです。結局、医師に従い、仕事を休んで静養するしかありませんでした」

業務を離れ、休養をとることにした田中さんは無職となった。休養後、仕事を復帰するに当たり、田中さんが選んだのは登録派遣だった。派遣先についての希望も、地理的な条件のみ。

そして紹介されたのが、通信事業者の基地局刷新のための進捗管理のプロジェクトだった。

「Excelが使える人を募集していて、当初は一般派遣の平均的な時給でしたが、最終的には派遣先社員の給与(年収)を上回りました」

もちろんExcelで進捗管理を入力するだけで時給を上げていったわけではない。

プロジェクトには設計会社や施工会社など、複数の協力会社が関わるため、進捗の確認やすり合わせも時間がかかり、何とも効率が悪い。そこで田中さんは、関係する会社のスタッフを定期的に呼び寄せ、一部屋に集めてその場で図面の修正などを行わせた。

また、同プロジェクトでは各担当者からのヒアリングを行うために、ITだけでなく、建築、電力、通信、法律などの知識も必要になる。そこで田中さんは、業務の傍ら、それらの分野の基礎知識を1つずつ身につけていったという。これらの努力により、進捗上の問題点がすぐに明らかになるなど進捗管理の効率が上昇し、田中さんは図面チームのリーダーを任されるようになったのだ。

f:id:itstaffing:20190909121607j:plain

キャリア形成の極意は、スキルプラス

登録派遣を経て、現在はフリーランスとして、以前も仕事をしていた大手シンクタンクで、業務委託というカタチで働いている。

自身を「雑務のエキスパート」と呼び、毎月100ページ近い顧客への報告書作成や、ネットワークやサーバーのセキュリティー管理業務など、ありとあらゆる仕事をしている。ただし、オーバーワークにならないよう、18:00までには退社するようにしているという。

そんな田中さんに、キャリア形成の極意を聞いてみた。

「私の場合は、人がやりたがらないことを率先してやるように心がけています。若い人は、『スキルアップ』に目が向きがちですが、私はスキルアップではなく、スキルプラスの方が大切だと考えます。あるスキルについてレベルが高い人は自分以外にも大勢います。しかし、いくつかのスキルを併せ持った人となると、その組み合わせ次第ではありますが、かなり限られてきます」

振り返ってみれば、田中さんのキャリアは、何か一つの技術分野を極めていくスペシャリスト型ではない。もともとExcelやAccessの職場での活用と提案からスタートし、現場で発生するさまざまな雑務をこなしながら、異なる分野のスキルを一つひとつ加えていったオーソリティ型と言える。そうして出来上がった稀有な存在に、高い付加価値がついているのだ。

f:id:itstaffing:20190909121609j:plain

最後に、スキルプラスのために日々実践している手法を紹介してくれた。

「本は1つのテーマについて最低2冊は読みます。1冊は基礎解説である程度全域を網羅しているもの。もう1冊は図解などで、部分的な理解を深めていくものを選んでいます。自宅で使うPCも遊び用と勉強用を分けており、勉強用のPCでは、次の日の仕事のために、いろいろ試したり、人と話すために調べものをしたりしています。そうすることで気持ちが切り替えられるし、勉強用PCのブラウザの閲覧履歴そのものが自分にプラスされたスキルの記録にもなりますよ」

直面する課題を一つひとつ解決していくために努力を続けることは、一見簡単そうに聞こえるが、成し遂げるのは難しい。しかし、結果がついてくることを知っている田中さんは、今日もスキルプラスのために励んでいるだろう。

第3話 マージの仕組みを見てみよう【連載】マンガでわかるGit~コマンド編~

f:id:itstaffing:20190828142031j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

第2話 では、ブランチの概念の理解と、ブランチの作成・確認・切り替えを習得しました。

$ git checkout
(チェックアウトする)
 
$ git branch   
(ブランチを作る)

今回の第3話では、2つのブランチを1つに統合する「マージ」を実践。その仕組みもあわせて学びましょう!

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

マージするタイミング

どのようなタイミングでマージをすることが多いのでしょうか。主なケースを2つ、マンガで見てみましょう。

1.目的としていた作業が終わり、変更を反映したいとき
f:id:itstaffing:20190828142034j:plain

2.masterブランチ上の新しいコミットを取り込みたいとき
f:id:itstaffing:20190828142038j:plain

実際にマージしてみよう

マージのコマンドは次の通りです。

$ git merge [統合したいブランチ名]


前回、developブランチにチェックアウトしている状態でsample.txtに変更を加え、コミットするところまで終えましたね。

▼ 今のブランチの状態
f:id:itstaffing:20190828142041j:plain

今からmasterにもコミットを作りたいので、この状態からmasterブランチにチェックアウトをします。

$ git checkout master
 
  develop
* master


masterにチェックアウトできました。

f:id:itstaffing:20190828142043j:plain

それではこの状態で、新しくsample2.txtを作り、ステージしてから、コミットします。

$ echo "Happy Git" > sample2.txt
$ git add sample2.txt
$ git commit -m “sample2.txtを作成”

これで、ブランチが二股に別れた状態になりました。

▼ 今のブランチの状態(わかりやすいように、コミットIDは省略しています)
f:id:itstaffing:20190828142047j:plain
いよいよマージしてみましょう。
マージするためのコマンドは、

$ git merge [統合したいブランチ名]

です。
今回は、developブランチからmasterブランチへ取り込みたいので、
masterブランチにチェックアウトしていることを確認し、

$ git merge develop

と打ち込みます。

コミットメッセージの編集画面になります。

「a」キーで入力モード、「esc」キーでコマンドモードになります。
特に追加するメッセージがなければ「esc」キーを押してから「ZZ」と入力してコミットメッセージを保存します。
f:id:itstaffing:20190828142049j:plain

するとどうでしょう。
見事、2つのブランチが1つに統合されました!


▼ 今のブランチの状態
f:id:itstaffing:20190828142051j:plain

マージの仕組み

第2話 でブランチの仕組みを学んだからには「マージの仕組みも知りたい!」と思っている方のために、マージのコミットオブジェクトものぞいてみましょう。
$ git cat-file -p [マージコミットのID]

f:id:itstaffing:20190828142054j:plain

気がつきましたか?

通常は1つのコミットにつきparent(親)は1つですが、マージコミットの場合、驚くべきことにparentが2つあるのです。なぜなら、2つのコミットから1つのコミットを生成しているからです。お父さんとお母さんから子どもが生まれるようなイメージでしょうか。

f:id:itstaffing:20190617145535j:plain
えーっと、じゃあ普通のコミットは雌雄同体のアメーバで、マージコミットはお父さんとお母さんがいるって感じ?
f:id:itstaffing:20190617145541j:plain
不思議な比喩だな……。まぁ『マージコミットには2つ親がいるんだ~』ぐらいの認識でいいだろう。
f:id:itstaffing:20190617145535j:plain
親が3つになったり、4つになったりはしないの?たとえば3本のブランチを一気にまとめて統合したいときが、もしもあったらどうするの?
f:id:itstaffing:20190617145541j:plain
普段、3、4本のブランチを一気に統合するってことはあんまりないけど、マージの仕組み自体、統合できるブランチは2本までだから、1つずつ統合していくことになるよ。
f:id:itstaffing:20190617145535j:plain
ふーん!
f:id:itstaffing:20190617145541j:plain
今回はそのままマージできたけど、それぞれのブランチで同一行に変更があった場合、Gitが人間に「どっちの行の変更を採用すればいいの?」と尋ねてくることがあるんだ。これをコンフリクトという。コンフリクトについては次回取り上げよう。
f:id:itstaffing:20190617145535j:plain
Gitって親切なんだね!

まとめ

さて、ここまででマージの仕組みとコマンド操作がわかり、

$ git merge [ブランチ名]
(マージする)

が使えるようになりましたね!

Gitにはまだまだたくさんのコマンドがあります。
次回は、コンフリクトについて学んでいきましょう!

▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」