うえきのブログ

妙高市に住んでいるサーバエンジニアのブログです

Scratch3でCHaserを遊べるようにしてみました


みなさんU16プログラミングコンテストをご存知でしょうか?2011年に北海道旭川で始まった、16歳以下の高校生、中学生、小学生を対象としたプログラミングコンテストです。

CHaserについて

旭川では競技部門、作品部門、IoT部門があり、わたしの地元新潟県上越地域(上越市妙高市糸魚川市)では2021年から競技部門の準備を進め、11月3日に大会を開催しました。

競技部門ではCHaser (チェイサー) という対戦型プラットフォーム上で、1対1 のプログラム同士の対決を行います。

CHaserクライアントは、JavaHSPRubyなど様々なプログラミング言語で開発が可能です。上越妙高ではPythonを使ったプログラムを事前講習会で教え、大会に参加してもらっています。

お陰さまで2年目となる今年は事前講習会の参加者も増え、対象も小学校低学年から中学生と広い年齢が参加してくれています。ただ、やはり小学校低学年の子たちがVSCodeを使ってPythonのプログラムを書くのはやや難しいという課題がありました。

そこで今回は小学生にも馴染みのあるScratch3を使ってCHaserクライアントが作れるようにしてみました。

Scratch3 CHaser機能拡張

Scaratch3版CHaserクライアントの使い方

技術解説の前に、まずは遊び方を紹介したいと思います。 Scatch3(Webブラウザ)からは直接CHaserサーバーと通信ができないため、scratch-chaser-proxy という中継プログラムを経由することでやりとりを行います。

前提状況

  • CHaserサーバーを実行してゲームができる環境をあらかじめ用意してください。
  • インターネット環境が必要です。
  • Scratch3の利用には対応したブラウザーが必要です(Chromeの最新版を推奨)
  • パソコンは1台でもできますし、4つの役割をそれぞれ異なるパソコンにすることもできます。
    • CHaserサーバー
    • Coolクライアント (Scratch3を操作するブラウザ)
    • Hotクライアント
    • scratch-chaser-proxy を実行するパソコン

実行手順

scratch-chaser-proxy

  1. GitHubリリースページからお使いのOSに対応したプログラムをダウンロードします。
  2. コマンドプロンプトまたはターミナルからダウンロードしたファイルを実行します。

CHaserサーバー

  1. CHaserサーバーを起動し「TCP接続待ち状態」にします。

Coolクライアント (Scratch3)

  1. ブラウザで https://ueki-kazuki.github.io/scratch-gui/ を開きます。
  2. 拡張機能から "CHaser" を追加します。
  3. ブロックから "127.0.0.1 に Cool で ユーザー1 という名前で接続する" をスクリプトエリアにドラッグアンドドロップします。
  4. 必要に応じて接続先CHaserサーバーのIPアドレスを変更してください。
  5. ブロックを実行します。
  6. CHaserサーバーのCoolの状態が「準備完了」になれば接続成功です。
  7. 繰り返しなどいろいろなブロックを組み合わせて動かしてみましょう!

ゲームをやり直すときは

  1. ゲームのたびに scratch-chaser-proxy を実行し直す必要はありません。
  2. 再度ゲームをしたい場合は、CHaserサーバーを起動して「TCP接続待ち状態」にしたら、Scratchを再度再生するだけでOKです。

技術的な仕組み

Scaratch3 機能拡張

Scratch3用のブロックは機能拡張を開発しました。ここではJavaScriptを使います。

機能拡張の作り方のチュートリアルがあるので、これらを参考にさせていただきました。

後述しますが、scratch-chaser-proxy とはWebSocketを使って通信を行っています。CHaserサーバーからの応答を待つためには Promise を使った同期処理が必要になります。ここがJavaScriptの非同期処理に慣れていないと、やや難しい点です。

コードはGitHubの作業ブランチにアップしてあります。

scratch-chaser-proxy

前述の通り、Scatch3(Webブラウザ)からは直接CHaserサーバーと通信ができません。そこで scratch-chaser-proxy という中継プログラムを経由することでやりとりを行います。

Scratch3とCHaserの通信の流れ

このプログラムはGo言語を使いました。GoのおかげでWindowsMacそれぞれの環境用のバイナリを簡単に作ることができます。

最新コードはGitHubのdevelopブランチにアップしてあります。

機能制限、今後の予定、質問とか

Scratchの機能拡張をCHaserのアイコンに置き換える

Scratchの機能拡張を開くとでてくるアイコンは、上で紹介したチュートリアルの絵のままになっています。

CHaserのアイコンを探したのですが見当たらず、どなたかにオシャレなアイコンを描いていただけるとうれしいです。

Lookup, Searchが未実装

GetReady, Walk, Putは使えますが、LookupとSearch命令はまだ実装できていません。

仮に値が取れたとして、Scratchでどう活用すればいいのかが思いつかず、手つかずとなっています。

ゲームセット変数がほしい

ループブロックで「ゲーム終了するまで」を実現したいのですが、ゲーム終了を表すブロックが未実装です。

テスト・テスト・テスト

はい、テスト全然書けてないです。WebSocketまわりはmock使ってテスト書いておかないと。

XXXXの動きがおかしくない?

すいません、まだ十分な動作確認を行っていないのでバグがたくさんあります。 9月中に時間をみて直していきたいと思ってます。

そもそもXXXXがおかしくない?

Scratch3機能拡張のお作法、JavaScriptのお作法、Goの、GitHubリポジトリの、、、と、いろいろな面で至らない点があるかもしれません。

もし「こうした方がいいよ」という点があればプルリクいただくか、Twitterはてブで教えてください!

プログラミング教材としても

今回の開発で用いた技術は、プログラミング初級者にも手頃な教材なんじゃないかなと思います。

  • JavaScript
    • npm / yarn
    • Promise (非同期処理)
  • Golang
    • Socketプログラミング
    • Gin (Webフレームワーク)
    • Makefile
  • WebSocket
  • Git / GitHub

新卒の方の半年後の研修くらいでちょうどいいかもしれません。プログラムしたものが視覚的に動きはじめると楽しいですね。

最後に

Scratchを使って、より広い年齢層の方にCHaserを楽しんでもらい、そしてU16プログラミングコンテストへの興味を持ってもらえたらと思います。

CHaserを使ったU-16プログラミングコンテスト旭川上越だけでなく、全国に広がっています。

ぜひお近くの市町村で開催されていれば、参加してみてください!

VUIに懐疑的な地方エンジニアがAmazon Echoを使ってみた Day.1

Amazon Echoが届いたので、いろいろ使ってみました。

開封や設定は他にブログがあるから、ここでは感想や今後の使いみちについてまとめてみた。

インストースしたスキル

  • radiko.jp
  • ニュース
    • CNN.co.jp News
    • DELISH KITCHENのおすすめレシピ特集
    • J-WAVE HEADLINE NEWS
    • エルオンライン

radiko.jp

住んでいる地域のラジオが聞ける。なぜかNHK-FMが聞けない。 新潟にいても関東のラジオ局(J-WAVE)とか聞きたい。

ニュース

トピックスだけをザッと伝えてくれるニュースをチョイスしています。

デフォルトで有効になってるNHKラジオニュースは無効にしました。再生が始まると長いのと、流れている間Alexaが操作できなくなり途中で止めることもできなかったためです。

使ってみた感想

我が家の使い方

我が家にはラジカセ(死語?)のような音楽を流せる機器がないため、ひとまず音楽を流しています。radikoFM新潟を流したり、Amazon Musicで曲を流したり。

BGMが欲しいなってことで「アレクサ、音楽をして」っていうと高確率でロックを流し始めるので「バロック流して」ということが多いです。

「クラシック流して」って言ったら「天国と地獄」が流れはじめました。

声による操作

家族とワイワイ試していたためか、声による操作は考えてたよりは違和感なくできます。評判通り音声認識精度が高いせいかもしれません。

声は聞きやすい

小学生の次男が「アレクサは声がきれいだね」って言ってくれたので、きれいなんだと思います。Siriと遜色ない感じ。

CNNのニュース読み上げの読みやイントネーションがちょいちょいおかしいけど、これから良くなっていくことを期待。「とらん、まい大統領」ってなにかと思った。

音声入力はきっかけ作り

Alexaへの音声入力は、これから操作したいことに対するきっかけとして最適なんじゃないかと感じました。

コンピューターの操作がタッチパネルで簡単になったとはいえ、機能が膨大なのでどこから操作するのかを探すのが結構な手間です。

  • 「アレクサ、お寿司を注文したい」
  • 「アレクサ、電話をかけて」
  • 「アレクサ、天気を教えて」

その後にメニューが表示されて、指で選ぶという流れだと使いやすいんじゃないかな。

これからスキルもどんどん増えていくでしょうし、目的のスキルを選ぶのはなおさら難しくなっていくんでは?と感じました。

不満点

1日目としては思ったほど不満な点はありませんでした。

音量がおかしい

本体のボタンを操作せずに音量を変えられるのは便利。

  • 「アレクサ、音量さげて」
  • 「アレクサ、ミュートして」
  • 「アレクサ、ミュート解除して」

ただAlexaの声とAmazon Music, Bluetooth との音量がおかしい。Alexaの声が2レベルくらい大きい気がする。これどうにかならないかな。

(メモ)地方におけるスマートスピーカー活用

スマートスピーカーでよく言われるのは「スマホなどの操作が苦手な高齢者でも音声で操作できる」という話です。本当?

話すことはできるけど耳の遠い高齢者はいるから、応答は音声でなく画面で教えてほしい。Echo Showが待たれる。

そもそも高齢者がスマートスピーカーに話しかける理由ってなんだろう?

地方の高齢者の生活を想像してみる

  • 昨今、高齢者が危険な自動車運転による事故が問題視されている。
  • 自分の祖父母の世代(90歳くらい)だと免許を持ってる人が自体が少ない。
    • そのためここ数年で出始めた問題で、これから増えていくのでは?
  • 田舎だと自動車が生活必需品。徒歩圏内で買い物ができる商店街が廃れている。
    • 食品の配達は難しい。配達してもらいたくても住んでる場所が圏内にない。
    • 一番難しいのが通院。
  • だから免許証返納を嫌がる。まわりも分かってる。
  • その地域の高齢者がデジタルデバイスを持っている・使えるという前提が作れればインフラも整備されるのでは?
  • 出かける、誰かと話すというのは生活の上で大事。ITがきっかけを提供するという視点で考えてみる。

話す

  • LINEみたいに音声で個人チャットできるとうれしい?
  • 「アレクサ、○○さんと話をしたい」
  • 「アレクサ、大豆の作付けについて相談したい」
  • 自動文字起こしして、翻訳してくれたら海外の人とも会話できるね。
  • ハム(アマチュア無線)みたいなもの

でかける

  • 地方の定期路線バスは減少・廃止の傾向にある。
  • 代わりにコミュニティバス(オンデマンドバス)が用意されている。
  • ただ今どこを走ってるのか分からない。
  • 朝一番でAlexaに出かけたい場所を伝えたら、コミュニティバスが迎えにきてくれるとうれしい?

見守る

  • 普段は一人で生活できている高齢者が、突然具合が悪くなった時に気づける。
  • いまは必ず通る廊下やトイレなどにセンサーを置いている。
  • お湯は誰でも毎日沸かす?
    • ガスがあぶなくて使わない人もいる。
    • 電気ポットも空焚きの危険がある。
    • 「アレクサ、お湯を沸かして」で沸かしてくれる(外からも検知できる)ポットがあるといいかも。
  • Alexaから、話しかけてくれるとうれしい
    • 「お薬飲みましたか?」
    • 「おはようございます。きょうは病院に行く日です。」

まとめ

Amazon Echoを実際に使ってみたところ、予想以上にこちらの言うことを聞き取ってくれてストレスなく音声操作ができています。

現時点ではまだまだ用途の幅は狭いなというのが実感です。我が家ではラジカセ代わりですし。

ただ、所有することで初めて「じゃあ、こんな使い方もできたらいいよね」という発想が生まれるんじゃないかと思います。音声インタフェースに懐疑的な人にほど、まずは1台使ってみてもらいたいデバイスだなと感じました。

Echo生活1日目の感想でした。

40歳になったのでこれまでの10年を振り返ってみた

40歳になったので、これまでの10年なにをやってきたのか振り返ると共に、自分のポートフォリオ的に記録をしておこうと思ったのでブログにまとめてみた。

ひっくり返した資料は下記のもの

  • メール履歴(試験の申込メールとか)
  • はてなダイアリー(読んだ本とか、当時の考えをまとめたメモとか)
  • Amazonの購入履歴(読んだ本)

2006年(30歳)

2005年の3月からはてなダイアリーを使って育児日記をつけはじめる。

前の年の1月に長男が生まれて、ちょっと意識が変わり始めてたんだと思う。ライフハック系の本やブログを読み漁ってた頃。
この時期に「Actionメソッド」と「安心メソッド」といういまでも自分の考えのベースとなる手法を身につける。GTDの本を読んで感銘を受ける。

2003年に転職した職場で担当したJava Webアプリケーションの開発も一段落して、次の役割を模索してた時期。UnixサーバーやOracleが触れたので「インフラ担当」として強みをだそうと社内整備を進めはじめてたと思う。
「ピープルウェア」とか「デッドライン」とかソフトウェア開発の本を読んでたのもこの頃。

■この年に関心のあった技術とか

■この年のイベント

  • 4月 有志で社内勉強会を企画して始める(この後2008年まで細々と続けてた)
  • 12月 次男誕生

2007年(31歳)

2004年の中越地震、3月の能登沖地震、7月の中越沖地震と震災が連続したので、職場でBCPが重要視されはじめる。

業務システムの冗長化やシステム復旧手段の明文化などいろいろ検討することが求められた。たぶん職場にITILコンサルタントが入って、ITILを知ったのはこの時期。

■この年に関心のあった技術

■この年のイベント、できごと

2008年(32歳)

プログラマ35歳定年説を感じマネージメント系の本を読んでた。自己啓発本を読み漁ってたのもこの頃。「おもてなしの経営学」と「夢をかなえるゾウ」は良い本だと思う。

自己啓発本を読んで自分の中で昇華した言葉が次の3つ。

  1. 自分を信じる
  2. 言い訳しない
  3. 仕事は楽しく

とにかく本を読んでいろいろ試してた年らしい。Amazonで買った本の冊数とか個人ブログの投稿数が他の年に比べてダントツに多い。

197x会ってメーリングリストを知って参加してみる。地方にいると他社のITエンジニアとの交流がないので。やっぱり東京のエンジニアは進んでるなー、華やかだなーと感じたのを覚えてる。
ここで自己紹介した人のTwitterとかをフォローして、その中に都元さんがいる(重要

■この年に関心のあった技術

■この年のイベント

2009年(33歳)

前年のリーマンショックの影響で常駐先の業績が悪化し常駐契約が解除される。代わりに保守契約として週に数日だけ客先で作業するという形態に。

前年から進めたシステム更改の企画も白紙に。この後数年、より安い新システムを企画しては話が流れ再企画という会議&会議をくり返す。

この10年で最悪の年。会社に行きたくなくて仕方なかった。軽い鬱病っぽくなってた。

■この年に関心のあった技術

■この年のイベント

  • 10月 IPA ITサービスマネージャ試験(不合格)

2010年(34歳)

客先で各地域のエンジニアを富山に集約することに。そのため4月から単身赴任が始める。
単身赴任者はやる事なくてアニメにハマるってのはあるあるらしいぞ。

この年からの3年は、とにかく既存システムを延命させるための仕事をしてて会議+資料整理+延命提案+実施作業で日が暮れる。

ITサービスマネージャの学習のためITILをちゃんと学んだのはこの頃。

■この年に関心のあった技術

■この年のイベント

  • 4月 富山での単身赴任開始
  • 10月 IPA ITサービスマネージャ試験(合格)

2011年(35歳)

3月に東日本大震災が起きる。家に戻った3月12日に長野でも地震があって自宅も結構揺れた。
このまま単身赴任が続いて、なにかあった時に家族の元にいれないのはどうなのかな?って転職を意識し始める。

■この年に関心のあった技術

  • あんまり技術本買ってない(とらドラ!とモンハンにハマってたっぽい)

■この年のイベント、できごと

2012年(36歳)

人員削減が進み、いよいよ来年は自分の番かなって感じになってきた。この1年は引き継ぎを意識しながら仕事をしてた。

年末あたりにAWSって言葉を知っていろいろ本を買ってた形跡がある。アカウントくらいは作ったのかも。

■この年に関心のあった技術

■この年のイベント

2013年(37歳)

この10年最大の転機。10年勤めた会社を辞め、東京の会社に転職。きっかけは197xでフォローしてた都元さんのツイートを見かけたため。
AWSまったく素人なので、急遽JAWS-UG北陸のハンズオンに参加するために金沢まで片道3時間 車とばして参加する。

この年は3月から10月くらいまで、とにかくガムシャラにAWSを学ぶ。出勤の電車の中、帰宅後、土日ほぼ全てをAWSを学ぶ時間をあててた。Chefも触ることが多かったのでRubyも再学習。

11月くらいからラノベにハマってたっぽい(スマホKindle本を読めるようになったので)。ここで知ったのが「なれる!SE

■この年に関心のあった技術

■この年のイベント

  • 2月 JAWS-UG北陸 第3回勉強会ではじめてAWSをさわる
  • 3月 JAWS Days ボランティアスタッフとして参加
  • 5月 クラスメソッドに転職
  • 6月 AWS ソリューションアーキテクト アソシエイト取得

2014年(38歳)

AWSオペレーションチームを立ち上げる。

運用業務を自分の強みとして自信を持っていえるようになったのはこの頃か。
OTRSを利用してサービスデスク業務の整備に着手する。

■この年に関心のあった技術

■この年のイベント

2015年(39歳)

オペレーション部を立ち上げてぶちょーになる。オペレーションチーム増員に向けた体制・仕組み化の整備でバタバタしてた。

オペ業務効率化のためにLambdaをちょっとずつ採用し始める。node.js に手を出すが非同期処理の管理が難しすぎて即時撤退を判断。

■この年に関心のあった技術

■この年のイベント

2016年(40歳)

だんだんAWSを提案・提供する業務から離れ、使用する立場に移る。

  • PCIDSS 3.1 認定に向けた運用システムの整備
  • AWS Managed Service Program認定に向けた運用システムの整備
  • 請求まわりとかバックオフィス業務の効率化

請求まわりの効率化と顧客情報の一元化を図るため、Salesforceを導入する。Salesforceに情報を集約するためPythonを覚えてLambdaで動かす。
Salesforceでもいろいろ機能を作りたかったのでVisualforceとAPEXを学ぶ。

■この年に関心のあった技術

  • Salesforce
  • Python
  • SRE
  • 経営企画
  • 486 CPU(第3次 低レイヤー強化月間)

■この年のイベント

  • 6月 AWS DevOpsエンジニア プロフェッショナル取得

まとめ

10年いろいろあったなーって感じだけど、ここで「踏ん張らないと!」って時にいつも心に浮かぶ言葉があるので紹介して締めたいと思います。

やりたいことに優先順位をつけて、努力しなくてもいいから、覚悟を決めるの。
それだけで、たいていのことはできるわ。
無限のリヴァイアス カレン・ルシオラ)

戦闘には必ず明確な目的を与えるのだ。そうすれば艦長のあらゆる操艦が 敵には人間離れした神業のごとく映る。
沈黙の艦隊 海江田四郎)

おまえを信じろ。

おれが信じるおまえでもない。
おまえが信じる俺でもない。
おまえが信じる、おまえを信じろ!

天元突破グレンラガン カミナ)

クローズアップ現代に取材されてました

事の始め

6月26日、社内チャットで嵩原さんから「ちょっとご相談。いまお時間ありますかね?」と。

話を聞くとクローズアップ現代からの取材申し込みがあったそうで。「リモートワークで地方の自宅で働きながら親の介護をする人」みたいなことらしいけど、親の介護してないし。じいちゃんピンピンしてるし。

で、7月の初めにNHKのスタッフの人と打ち合わせ。もちろん自分は上越からリモート参加。改めて説明を聞くと別に介護にこだわってないみたい。

取材される経験なんて人生でそうそうないイベントなんで了承してみる。

取材当日の様子

7月6日に秋葉原オフィスを取材。翌7日に魚見さんとスタッフの方が上越まできて取材を行うことに。
午後3時くらいから5時までオフィスの様子を、その後家に帰ってから風呂と夕食風景を撮影してました。「妙高の風景を撮りたいので」とスタッフの方があがったのが6時半くらいなので、3時間半くらいずっとカメラがまわってました。そんだけ撮られてるとどこを使われるのかなんて分からず。放送をみて「あ〜ここが使われたんだ〜、こんなとこ撮影してたんだ〜」と言いながら観てました。

リモートワークについて

番組では使われなかったけど、リモートワークについて意見を聞かれたので3つ答えてる。

1. 会社や同僚の理解があること

番組でも何度か言われてましたけど「在宅だとサボるんじゃないか?」ってのは気持ちとしてあると思います。
そこで止めるか許可するかはやっぱり会社が決めることだと思うけど、自分の場合は入社面接時点から「いずれは地元に戻りますから」と言ってて「いいですよ」とアッサリ許可をもらってました。

あと、もしかしたら毎日オフィスで働く人から「あいつばかり出社せずに仕事できてズルい」と思われることもあるかもしれません。が、幸い私の場合は周りからそういう声はあがってません。リモートワークについての同僚の理解という点でもアッサリクリアすることができました。

新しい制度に対しては、反感・反発という感情的なものが大いに考えられるわけですが、そこを全然気にしなくて良い会社だったのでありがたいです。

2. ツールSkype、Hangout)や高速ネット環境が整備されてきたこと

社内チャットがあるとはいえ、やっぱり文字だけでは伝わりにくいです。

言葉と表情とでコミュニケーションを伝える手段としてSkypeやHangoutのようなツールが誰でも使えるようになったのは大きいと思います。またリアルタイムの動画をやりとりできる高速なネット回線が地方にも整備された(たぶん2008年くらいから)のも大きいと思ってます。

ノンバーバル大事。

3. お客様の理解があること

「客先との打ち合わせは?」という質問も受けました。「リモートでやってます」と答えました。

(超)有名企業でも、多くがリモートでの会議参加に対して受け入れてくれています。むしろ大手の方がそういう働き方について理解があるかも。大きな会社の方が、働き方の多様性についての啓蒙が進んでいるんですかね?

いくら会社が勧めていてツールがあったとしても、お客様の理解がなければ在宅仕事は難しいものだけど、むしろお客様の方から「1時間の打ち合わせのためにわざわざ来てもらうことないよ〜リモートで大丈夫」って言ってくれることが多い気がします。
(これまで10年間ずっと外回りをしてこなかったので、以前に比べて増えたのかどうかは分からない)

その他、リモートワークについて

リモートワークは特別か?

取材されて改めてリモートワークについて考えるきっかけになりました。で、結論としては「取材される程、特別なことか?」というのが正直な感想です。

これまでフリーランスの人なら地方にいながら東京の仕事を請け負うのは普通にあったでしょうし、全国にある拠点を社内テレビ会議システムで繋いで打ち合わせをやっている会社だってたくさんあります。

リモートだから意思疎通がし難いというのは確かにあると思いますが、だからと言って仕事ができないというわけではないです。自宅でまじめに働こうが、サボろうがアウトプットを出せばいいわけですし。評価についても同様。オフィス勤務者だから満足のいく評価を受けられるかって、そんなことないですし。

そう考えると「社員として自宅で一人でリモートワークをする」ってそんな大袈裟なことじゃないよな〜と思ってます。

すべての人にリモートワークを勧めるか

これはハッキリ「いいえ」と言いました。「リモートワーク=一番素晴らしい働き方」とは思ってません。設備とかの関係で職場にいかなきゃできない仕事だってあるでしょうし。仕事とプライベートをはっきり区別したいってのもあるでしょうし。

ただ自分の場合 クラメソ入社前は、単身赴任の終わりも見えず地元で再就職先の見当もつかない、自分で会社を始めるか、求人のある異業種に転職するかしか考えてませんでした。

なので、あくまでも「こんな働き方もあるんだよ」「地方で仕事がなくても、フリーランスにならなくても、こんなやり方で東京の仕事ができるんだよ」ってのを知ってもらえたらいいなと思います。

あわせて読みたい

2013年、先行きが見えない中で初めてAWSに触れて、JAWS-UG北陸の人に悩みを相談した時のです。kazuki-u.hatenablog.com
で、東京での単身赴任時代のお話。kazuki-u.hatenablog.com

おまけ 番組を見ての感想など

  • オレこんなに太ってたっけ?
  • 野郎の入浴シーンはいらんよね、オレもそう思う
  • 「これお風呂に入れてください」ってディレクターさんが入浴剤をくれましたw
  • 長男が読んでた本はJR時刻表で、次男がやってたゲームはマインクラフトです
  • 妻は番組で初めて夫が部長になってたことを知ったようです
  • じいちゃんのインタビューがカットされてて、ちょっと寂しそう

オレとJAWSと単身赴任

このブログはJAWS-UG Advent Calendar 2014の7日目です。6日目は西島さんの「2014年のJAWS-UG沖縄まとめ」でした。

はじめに

こんにちは植木和樹です。先日JAWS-UG上越妙高支部のキックオフをさせてもらいました。地元でJAWS-UGを立ち上げるにあたっての経緯やら思いやらを本日はポエムな内容で書き留めておきたいと思います。

JAWS-UGと出会うまで

ちょっと前 2012年冬

2010年の春から始まった富山での単身赴任生活も2年半を過ぎようとしていました。景気低迷により当時の赴任先では翌春(2013年春)の人員削減は免れない状況でした。地元に戻っても仕事はなく、次は大阪か名古屋かという話が出ていました。
いつまでたっても家族と一緒に暮らすことはできなさそう、ということで独立を真剣に考えていました。しかし自分が得意とするサーバーインフラ、それも数十台という中規模のシステムの保守運用というとなかなか個人で受けられるものではありません。なによりハードウェアの調達や顧客探しなどどうすればいいのかまったく先の見えない状態でした。

たぶんAWSを知ったのは、この頃。へぇ〜クラウドって世界があるんだね〜と少しずつ調べて始めた頃だったと思います。

JAWS-UG北陸との出会い 2013年2月

そんな時Twitterにとあるツイートが流れてきました。

AWSを使えば、ハードウェアを調達しなくてもサーバーの仕事ができる。なにより地元でも仕事ができる!ということで、すぐに採用応募フォームから申し込みをしていました。

採用応募をしてみたもののAWSのことは全く分かりません。そんな折、2月2日にJAWS-UG北陸 第4回勉強会が金沢で開かれることを知りました。AWSを知ることができるチャンスと考え、すぐに申し込みをしました。

JAWS-UG北陸とAWSエバンジェリスト堀内さんとの出会い

ハンズオンは強烈でした。たった数クリックでMulti-AZのサーバーとデータベースが用意できる。エンジニアが考えるのはOSより上のレイヤーだけ。まさに自分が求めていたものです。
勉強会後の懇親会にも参加しました。Amazonエバンジェリスト(横文字カッコイイ!)堀内さんと一緒に酒を飲みながら話せる。新潟の田舎エンジニアの目から見て、Amazonの中の人と気軽に話せているJAWS-UG北陸のコアメンバー松本さん、相羽さん、中道さんは羨望の対象でした。この人達と対等に話せるようになりたい、もっとAWSを知りたい!使いこなしたい!そんな思いを胸に単身東京へ赴任しました。

不安だらけでJAWS-UGへの参加

まわりはすごい技術者だらけ

いざ東京に出てきたものの、社内はすごい技術者だらけでした。技術の内容にも、会話のスピードにもついていけず、5月に入社して7月頃までは半泣きで仕事をしていた覚えがあります。

そんな中、JAWS-UG横浜へスピーカーとして参加してみないかというお誘いがありました。横浜!オシャレ!カッコイイ!

でも自分に何がしゃべれるんだろう?自分が知っている知識なんて当たり前のことで退屈だったら?それより間違った知識を話してしまったら恥をかくんじゃないか・・・そんな不安な思いで一杯でした。

JAWS-UG横浜の前日の夜、目黒でCDP Nightというイベントがあり、こちらでもスピーカーとして参加しました。発表後にスピーカーとAWSの中の人だけが集まっての懇親会がありましたが、まわりは知らない人だらけでした。でも、そんな自分にみんなが気軽に話しかけてくれました。新潟から出てきたばかりで何も知りませんって話したら、色んな人を紹介してくれました。怖くない!すごいイイ人達だ!ありがとうCP櫻井さん、得上さん。

翌日のJAWS-UG横浜で出会った人達も、同じでした。みんな楽しそうに技術を語り、悩みを話し、自分ならこうすると意見を言い合える場でした。会社の枠を超え、AWSというキーワードでエンジニアが集う場が新鮮で驚きでした。

恥を捨てて飛び込んでみた

勉強会は楽しい。
もっと人前で発表する経験しよう。
恥をかいたっていいじゃない。
単身赴任している今、なにも得ずに地元に戻れば、また仕事探しに怯える日が待っているだけだ。
もっと勉強会に参加しよう。もっとAWSを学ぼう。もっと自分を知ってもらおう。

その後はcloudpack Night、JAWS千葉團など、都合のつく限り参加して、話をさせてもらいました。


多くのJAWS-UG勉強会に参加するにつれ、知り合いも増え、相談し相談される関係が広がっていきました。そして自分だけでなく、AWSを触ったばかりの人が多いこと、興味はあるけど意外なところで躓いている人がいることを知りました。自分の意見が誰かのヒントになりお礼の言葉をもらえるにつれ、仕事に対する自信も徐々についてきました。(そう!クラスメソッドのエンジニアのレベルが当たり前じゃなかったんです!)

JAWS-UGさいたまへの誘い

横浜の懇親会の席での話。単身赴任で大宮に住んでますと話したところ、さいたま支部の金谷さんが「じゃあ、さいたまのコアメンバーになりませんか?」と誘ってくれました。もちろん二つ返事でOKです。

アメンバーが集まった企画打ち合わせの場で、若林さんから次のさいたまの勉強会では50分の枠をもらえることになりました。ライトニングトークでなく、時間を使ってAWSの話ができる機会がもらえた事がうれしかったです。そして9月に開催された勉強会当日まで、何度も何度も資料の修正をやり直したのを覚えています。

東京や千葉の勉強会ももちろん素晴らしいのですが、住まいから30分で行ける距離でエンジニアが集まり勉強会が開けるって素敵な事だなって思いました。JAWS-UG上越妙高支部を立ち上げようという気持ちになったのは、きっとさいたま支部での経験による部分が多いです。

まとめ:JAWS-UGに興味がある方へ

単身赴任している間に、さいたま支部の他、横浜、千葉、東京、浅草、JAWS FESTA Kansai、そしてJAWS Day 2014といった支部・イベントにお邪魔させていただきました。どの支部の勉強会も技術者の笑顔と熱意にあふれていました。そして、どの支部の人達も外から見るよりもずっと(本当に!)親切でした。全然こわくありませんでしたw

AWSに興味がある方は、ぜひお近くのJAWS-UG支部勉強会に参加してみてください。どんなテーマでも良いのでLTをしてみてください。そしてできればコアメンバーとして中からコミュニティに関わってみてください。

もちろんJAWS-UG上越妙高支部への、ご参加もお待ちしております!


以上、JAWS-UG Advent Calendar 2014の7日目でした。明日8日目は古渡さんです。

IE9のメニューが英語になってしまったので直していたらIE10にバージョンアップされていた

知り合い(女性)からインターネットエクスプローラのメニューが英語になってしまったので直してほしいとの依頼があったので対応した。その時の記録。

症状

対応1. IE9をアンインストールする

やったこと

  • コントロールパネル - プログラムと機能から”インストールされた更新プログラム”を開き、”Internet Explorer9”をアンインストールする

結果

  • IE9のアンインストールが完了
  • なぜかIEのバージョンが10になった!?
  • メニューは英語のまま

対応2. IE10をアンインストールする

やったこと

  • IE9と同様に”インストールされた更新プログラム”からIE10をアンインストールしようとするが項目がでてこない(困)
  • Microsoftフォーラムの書き込みを参考にコマンドラインからIE10をアンインストールする

結果

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\windows\system32>FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows
-InternetExplorer-*10.*.mum /c "cmd /c echo Uninstalling package @fname && start
 /w pkgmgr /up:@fname /quiet /norestart"

Uninstalling package "Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~x86~en-US~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~x86~~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-Package-MiniLP~31bf3856ad364e35~x86~en-US~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-Package-TopLevel~31bf3856ad364e35~x86~~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~x86~en-US~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~x86~~10.2.9200.16521"
Uninstalling package "Microsoft-Windows-InternetExplorer-VistaPlus-Update~31bf3856ad364e35~x86~~10.2.9200.16521"
  • IE10のアンインストール成功
  • IE8に戻り、メニューも日本語になった

対応3. IE9にバージョンアップする

やったこと

  • Windows UpdateIE9へバージョンアップしようとするが "800F081E" というエラーコードでインストールに失敗する
  • Microsoft FixIt!を試すが結果は同じ(ちなみにFixIt!はダウンロードしてから実行しないと画面が表示されなかった)
  • IE9以外の重要な更新をすべて適用する
  • 再度試みるがインストール作業が1時間たっても終わらない(→強制的に電源オフ)
  • IE9のインストーラをダウンロードして手動でインストールする

結果

途中の昼休憩もはさんで4時間かかった。なんだかまだ怪しいけど、直ったから、まぁいいか・・・


一度データバックアップとってクリーンインストールしてあげた方がいいんだろうけど、パソコン預かって作業する時間がない。

AWS Game Day 2013 Tokyoに参加してきたよ

6月8日にAWS Game Day 2013 Tokyoに参加してきました。以下は備忘録を兼ねた日記です。

開催前

6月6日のAWS Summitの夕方に開かれたJAWS東京勉強会でルール説明があるというので参加したのですが、英語がサッパリ分からないので結局当日何をするのか、何を準備したらいいのか分からないまま臨みました。

一応開催案内メールで紹介されていたLearning from First Responders: When Your Systems Have to Workはダウンロードして読んではみましたが、サッパリサッパリです。

当日開始前

目黒のAmazonビルに集合。受付をすませ待合室で待機。ボッチな自分にも話しかけてくれる方がいたおかげでお互いのAWS歴などを話していました。

先日のJAWS東京にはたぶん300人以上来てたと思うので、今回の50人枠にはどれだけマッチョな人たちがくるのかと内心ビクビクしていました。ところが、意外に「AWS1ヶ月くらいです」とか「AWS未経験ですが見学枠がなかったので応募しました」な方が結構いたようです。もちろんTokyoリージョン開設前からAWSをバリバリ使ってましたよ〜みたいな人達も多くいたようです。(全18チームのリーダが熟練者だとしても全体の3分の1くらい?)

環境構築

ルール説明があった後、51名の参加者は3つの部屋に分かれ、さらに2〜3人のチームを作って環境を構築しました。自分はティターンズに配属されました。構築は手順書だけで10ページx4冊くらいあって、ハンズオンなら余裕で一日コースじゃね?ってくらいのボリュームです。しかもスクリプトがVirginiaリージョンでしか動かないとか、サンプルで用意されていた画像URLがいまは404 Not Found状態というワナがあり、原因調査してどうにか動くようになりました(Pythonコードを初めて触ったよ)。

今回の画像サムネイル生成バッチ処理の全体構成がどうなっているのかも把握できていないまま、いつの間にやらお昼の時間になってしまいました。環境構築は途中にして、間に合わなかったときのために用意された救済用CloudFormationだけ実行しておいて昼食を食べに出たのですが、帰ってきたらスタック作成に失敗してて泣きそうになりました(たしかリージョンが違っててTokyoリージョンで作ったKeyPairが見つからなかったため)。

攻撃

環境構築でバタバタしてたので攻撃手段を考える余裕もなく。でも存在しないURLをキューに渡すと404エラーでおかしな挙動をするようだったので、変なURLを送りつけてバッチ処理が困っているあいだに何か攻撃手段を考えようとしていました。


PowerUser権限のIAMユーザは渡されていたので、SQSやS3の読み込み・書き込み権限を剥奪すればバッチ処理は動かなくなることは明らかなのですが「それじゃ芸がないよね」ってことでしませんでした。夕方の懇親会で「サムネイル画像生成バッチ処理自体は動いているんだけど、なんだか挙動がおかしいってのがいい攻撃じゃない?」って話をしたら「いやいや、処理がちゃんと動いてて見た目にも問題ないように見えるけど実はやられてるってのがいいでしょ」という答えが返ってきて、まだまだエグさの精進が足りないなって思いました。


で、結局まともな(?)攻撃手段も浮かばないままタイムアップ。ふがいない。

復旧

攻撃中にも自分たちのEC2インスタンスの様子をCloudWatchでチェックしてたのですが、なにも攻撃されている様子がなく安心してました。ところがいざ様子をみてみるとS3やSQSへのアクセスはDENYされているは、S3にあるはずの作成された画像はすべて削除されているわ酷い状況でした。


1つ1つおかしなところを見つけながら直していったところ、無事インプットキューから元画像のURLを読み込んでサムネイル画像を作成しS3にファイルが作成されることが確認できました。「やれやれ、これで復旧完了か」と安心していたのですが、アウトプットキューに結果通知がたまるはずなのにいつ迄たってもゼロ件のままなのです。どうしてか分からず調べまわっているうちに、SQSの設定が変えられていていることが分かりました。"Delivery Delay"が最長の"15分"に設定されていて、"MessageRetentionPeriod"が"1分"になっていたためにキューにメッセージがたまらないように見えていました。


正直この復旧の時間が一番楽しかったです。自分で触っていると「ふつーそんな設定しないよ」ってことがされているので、たとえば前例のキューのように「こう設定すると、こういう挙動になるのか〜」となんだか感心しながら復旧していました。

ディスカッション

復旧が終わったら、参加者全員がひとつの部屋に集まって攻撃と復旧手段についてのディスカッションを行いました。

Google Docsで各チームの攻撃方法と復旧内容をリアルタイムに書き込み・共有しながら進めていったのですが、他のチームの攻撃方法は自分では思いつかないようなものばかりで、その資料をみてるだけでもすごく面白かったです。あまりネタバレすると第2回以降がつまらなくなってしまうかもしれないので簡単にご紹介すると、

  • SQSのキュー(本来サムネイル化する元画像のURLを送る)に無限リダイレクトするURLを流す
  • SQSのURLを処理するPythonコードの入力チェックの脆弱性を利用してOSをshutdownさせるコードを送りつける
  • CloudWatchのALARM設定でCPU使用率が高い状況が続いたらインスタンス止める

などなど。表彰された方は「EC2のScheduled Eventsを使って毎分AutoScalingの台数をゼロにする」という攻撃をした方でした。Scheduled Eventsでそんな設定できること知らなかったよ(AWSからのreboot/shutdownのお知らせ欄かと思ってた)。

講評

OFA(Obama for America)のマイルスから今回の感想と堅牢なシステムを作る上で重要な事の説明がありました。


堅牢なシステムを作る上で重要なのは「システムがあるべき姿を定義し、そこから外れたら自動復旧する仕組みにしておくこと」。これは今までのような「壊れた環境を早く・正しくリストアする」という技能よりも一つ上のレイヤーにある、ということでした。個人的にはCloudFormationでリソースを作成し、Chefでサーバをあるべき姿に「収束」させるって考え方に繋がる内容ですごく同感でした。



ハードウェア的な考え方であれば「調子の悪いサーバは捨てて新しいのを買ってくる」という復旧方法はなかなか選択できませんが、クラウドの場合はそれがいとも簡単にできるわけで。AMIを用意しておけば、おかしな環境を捨ててCloudFormationで一発元通りってことも可能です。その辺の「いままでの常識ではできなかった復旧方法」を受け入れるってのも今後大切なことなのかもしれませんね。



まとめ

本当に楽しい一日でした。たくさん考えて、たくさん笑った一日でした。


冒頭にも書いたけど、集まった方達全員が「できる人」ばかりじゃなく、NoviceからExpertまでいろんな経験値の人達が集まってたと思います。AWSあんまり触ったことないからちょっと自信ないなって人でもチームを組んだ人の(エグい)攻撃や復旧の手際を横でみてるだけでもすごい勉強になると思いますよ!


興味がある人は次回の告知がでたら、すぐに参加申し込みしよう!!(次回もすぐに席埋まっちゃいそう)