はてなでインフラ研修を受けました

11/20に株式会社はてなにアルバイト入社してちょうど5ヶ月経ちました.

インフラの事をほとんどわかっていない状態からスタートし,実務のタスクをこなしつつ研修を受けていました.

そして先月にそのインフラ研修を終えたのでそのレポートを書いていきます.

Go言語研修

まず最初にやったのはGo言語の研修でした.

はてなではgo言語の採用が進んでおり,mackerel-agentdroot等が実際にgo言語で作られています.

研修としてA Tour of Goを進めました.

defer, slice, goroutineなどを学びすぐ手を動かして試せる環境として良いサイトだと思います.

github.com

ISUCON4予選スコアアップ

次に行った研修はISUCON4の予選を動かしスコアアップを試すというものでした.

そもそも,ミドルウェアの設定について全然知らない状態から始まったため,

実際のISUCON4予選でスコアアップさせた記事を見て進めていきました.

confファイルのパラメータを調整していきながら,

  • どれくらい設定するファイルがあるのか
  • どんなパラメータがあるのか

を知っていきました.

設定を変えたあとはMySQLにインデックスを貼ったり,アプリケーションを変更したりして点数を見ていくと,

インデックスを貼った事による点数の増加が一番大きく,やっぱり「DBのチューニングが大事」というのをよく実感しました.

という感じでISUCONの研修は,模範解答から見て作ったものが多かったですが,

どういうときに何を設定すればいいのか多少見当がつくようになりました.

次回のISUCONは参加してみようと思います.

github.com

ISUCON4予選の環境をChefで再現する

まっさらなamiからChefを適用してISUCON4予選のwebアプリケーションが立ち上がるようにする

という目標で進めていきました.

立ち上がるようになった後は,

と,少しずつ世の中のwebアプリケーションに似た構成を目標に進めていきました.

Chef自体やそれぞれのミドルウェアの動作,およびネットワーク周りでだいぶ苦労しましたが,

研修を受ける以前と比べて相当知識がついたと思います.

またその途中EC2-VPC環境でkeepalivedを簡単に使うcookbookを作成しました.

github.com

github.com

インフラ研修を終えて・これから

以上でインフラ研修が終わり,今は実際のタスクのみをこなしています.

以前と比べて,特に普段使うことになるChefやAWS周りに関してわかることが増えたと感じていて,以前よりもはるかにタスクをこなしたり自分でissueを見つけたりすることができるようになりました.

今はLambdaを使ったタスクを進めていています.

趣味のプロダクトではGASを使っているのもあり,サーバレスがマイブームになっているので短期的な目標として「サーバレスに詳しい人」を目指していきたいです.

そんな感じで,これからもよろしくお願いします!

「定期的な楽しみ」について

先週から「メトロダーツの旅」と自分は呼んでいる遊びを始めている.

「ランダムにメトロの駅を一つ選び,仕事が終わったあとその駅まで行き周辺を少し散策しながら夕食を食べて帰る」というものである.

これが思っていたよりハマっていて,週二で東京に出ているときの楽しみになっている.

それもそのはずで,自分は普段Ingressをプレイしている事に加え,色んなお店を発掘するのが好きだからである.

自分の需要にあった楽しみを定期的に用意できたことになる.

 

ところで普段の生活を見てみると,細かいとこは違えど大枠で見れば毎日及び毎週のルーチンは決まっていることが多い.

その中で毎回違うもの,予測の付かないものを用意するのが人生において大事だと思った.

 

このような 「予測の付かない楽しみ」 の例として準備しやすい物の一つがアニメになるんだと思う.

そう思ったきっかけは普段アニメを見ない自分が毎週見ていた「ポプテピピック」である.

実際,毎週予測の付かない楽しみになっていたし,最終回が終わってしばらくは土曜日の夜に違和感を覚えていた.

ここでアニメの話を続けると,自分が何故普段アニメを見ていないのかというと,「しんどくなったときにやめにくい」からである

これは自分のスタイルが下手ということだと思うが,そのアニメが途中から面白くなくなった場合でも「見るのをやめる」という選択肢が取れず,最後まで見てしまう.

 

定期的なものは楽しみにもなるが,義務感に駆られたり生活を圧迫したりという原因にもなる

なので,苦しさを感じたらすぐやめるべきだし,すぐやめられるようにしておくのが大事という気持ちになっている.

 

「メトロダーツの旅」もいつまでやるかはわからない,けれどもやめたとしてそれは悪いことではない.

そういう意識をもちつつこれからも楽しんでいきたい.

GASを使ってサーバレスな採点アプリケーションを作った

大学の副手でプログラミングの採点をしているが,GASでその手間を減らすアプリケーションを作ることができた

その際にGASのイディオムを結構覚えたのでメモ.

アプリケーションの主な仕様

  • Googleフォームから採点するファイルをアップロードする
  • zipファイルの解凍,採点者ごとの担当を決めフォルダの再配置が自動で行われる
  • 採点用シートを自動作成
  • 採点完了後に踏むことでcsv書き出し,ダウンロードができるリンクを作成
  • 採点シート,各採点者ごとのフォルダ,ダウンロードリンクをSlack通知

Googleフォームから採点するファイルをアップロードする

Googleフォームではファイルのアップロード機能がついており,GASのhookと組み合わせることでフォームの送信ごとに自動でファイル処理を行うことができる.

f:id:cohalz:20180413215603p:plain
ファイルに対しても細かく条件をつけることができる

f:id:cohalz:20180413215655p:plain
フォームのhookを設定できる

hookでフォームから投稿されたファイルを扱うには下のようにすれば良い.

function submitForm(e) {
  const itemResponses = e.response.getItemResponses();

  const fileId = itemResponses.filter(
    function(itemResponse){ 
      return itemResponse.getItem().getTitle() == "質問名";
    })[0].getResponse();
  const file = DriveApp.getFileById(fileId).getName();
}

フォームに投稿されたファイルはフォームが置いてあるディレクトリ以下の,

#{フォーム名}(File responses)/#{質問名}(File responses)に保存されている.

ここで注意しないといけないのは,アップロードされたファイルは元のファイル名に加えアップロードした人の名前が追加されていることである.

fugaというユーザがhoge.zipというファイルをアップした際,

ファイル名はhoge - fuga.zipとなるため注意が必要である.

zipファイルの解凍,採点者ごとの担当を決めフォルダの再配置が自動で行われる / 採点用シートを自動作成

GASにはunzipcreateFileなど,Drive上でファイルを扱うメソッドが用意されていて簡単だった.

振り分け後,担当者と学籍番号のペアを返しスプレッドシートに書き込む.

f:id:cohalz:20180413225147p:plain
残りの点数とコメントを担当者がそれぞれ書き込む

採点完了後に踏むことでcsv書き出し,ダウンロードができるリンクを作成

ここはhookではなくGASから「Webアプリケーションとして公開」を利用した.

固定のURLにファイル名のパラメータを付けてアクセスすることで,対応するシートの情報からcsvをエクスポートするリンクを表示する実装になっている.

ファイルダウンロードはこれを参考にした. googleappsscript.hatenablog.com

これにurlパラメータと埋め込みを利用することで動的にシートやファイルを変更できるようになった.

function doGet(e) {
  var html = HtmlService.createTemplateFromFile("dialog");
  html.sheetName = e.parameter.fileName;
  html.fileName = e.parameter.fileName + ".csv";

  return html.evaluate();
}
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script type='text/javascript'>    
      function handleDownload() {
        var sheetName = <?= sheetName ?>;
        var content = <?= export(sheetName); ?>;
        var blob = new Blob([, content ], { "type" : "text/csv"});
        document.getElementById("download").href = window.URL.createObjectURL(blob);
      }
  </script>
  </head>
  <body>
    <a id="download" href="#" download="<?= fileName ?>" onclick="handleDownload()">ダウンロード</a>
  </body>
</html>

採点シート,各採点者ごとのフォルダ,ダウンロードリンクをSlack通知

GASにはGETやPOSTを行うメソッドもあるためSlackのwebhookを用意するだけで通知ができる.

qiita.com

スプレッドシートリンクを共有する際,getUrl()では前回アクティブだったシートが開かれてしまうため,指定したいときは下のようにgidも付けてURLにする必要がある.

function getSheetUrl(sheetName){
  const spreadSheet = SpreadsheetApp.openById(globalVariables().spreadSheetId);
  const sheet = spreadSheet.getSheetByName(sheetName);

  return spreadSheet.getUrl() + '#gid=' + String(sheet.getSheetId());
}

また,GASには環境変数がないため,分離したいものを以下のようにまとめて参照している.

function globalVariables(){
  return {
    spreadSheetId: '',
    rootFolderId: '',
    webappUrl: '',
    slackUrl: ''
  }
}

動作

フォームからzipファイルをアップロードすることでこのようなSlack通知が流れるようになる.

f:id:cohalz:20180413224141p:plain
実装したSlack通知

雑感

サーバレスというとLambdaが話題になりがちだけど,スプレッドシートやフォーム,ドライブを簡単に扱えるGASでも色々できそう.

それに加えて引き継ぎが必要な小規模グループだとAWSはアカウントや課金周りで相性悪い気がする. github.com

GASを使ってグルーヴコースター設置店舗マップを半自動で取得・更新できる仕組みを作った

以前からグルコスの設置店舗をGoogle Mapで見られるマイマップを管理していた. drive.google.com

リストの管理はマップ上から手動で行っていて,公式情報と照らし合わせることや,編集が難しいことがあり更新が間に合っていない状態だった.

マイマップのインポートはスプレッドシートから行えることを知り,Google Apps Script(通称GAS)を使うことで,スプレッドシートを自動で更新できるのではないかと考えた.

データは定期的に更新したいので,下の記事を参考にLamdaからAPI経由でGASを叩くようにしてみる.

qiita.com

その途中http://groovecoaster.jp/locationPythonスクレイピングしていると,店舗データがjsonで提供されていることに気付く.

ここでGASでjsonどう扱えるのか調べてみるとGAS自体にUrlFetchApp.fetchというGETを行えるメソッドを発見し,GASのみでリストの取得・更新ができるようになった.

ところがマイマップはインポートしたスプレッドシートと同期するわけではなく更新ができない.更新するには新しくレイヤを作ってインポートをするという手間が挟まる上,レイヤの見た目変更も手間が多く間違えやすい.

しかし,マイマップAPIも昔に終了しているのでここの自働化はひとまず諦め,GASからウェブアプリケーションを作り,

  1. URLにアクセスする
  2. スプレッドシートの更新が走る
  3. 更新終了後,マイマップのリンクと更新手順を表示する

という方法で半自動更新を実現した.アクセスすると下のように表示される.

f:id:cohalz:20180402194141p:plain

手動で更新してた頃に比べ台数の情報も確認できるようになったので自分でも便利に感じる.

ちなみに更新頻度やグルコス公式の鯖の負荷を考え,URL及びスプレッドシートは非公開で自分のみアクセス許可にしている.

作ったGASはこちら.

Groove-Coaster-Tool/reload.gs at master · cohalz/Groove-Coaster-Tool · GitHub

株式会社はてなに入社しました

株式会社はてなに入社しました

株式会社はてなに入社しました - hitode909の日記

バーチャルYouTuberにハマっている

年末が近付いたある日,こんな記事を見かけた.

www.j-cast.com

最近名前を聞くキズナアイについて把握するだけのつもりが,記事を読み進めていくと「バーチャルYouTuber「おじさん」に注目」という一文に目を引かれてしまった.

そこで検索し最初に見たのがこの動画だった(現在は削除されている).

【VRChat】バーチャルのじゃロリ狐娘Youtuberおじさん大地に立つ by ねこます 実況プレイ動画/動画 - ニコニコ動画

動画を見終わった後,キズナアイについても検索してヒットしたのが以下の2つの動画である.

バーチャルYouTuberキズナアイさん、生放送中にまたやらかしてしまう.m4a www.nicovideo.jp

これは釣り動画と判断しすぐに見るのを止めてしまった.

次に見たのはこの動画.

www.nicovideo.jp

ここでキズナアイの動画を探すのは一旦ストップした.

その後数日経った後,今度は「輝夜」という単語と画像が流れてくるようになった.

最初は新しいアニメキャラとばかり思っていたが,それにしては時期が変だと思い調べてみる.

どうやら今月始めたばかりのバーチャルYouTuberらしい.見てみる.

www.youtube.com

ハマった

なんだこれは.めちゃくちゃ面白い.

当時投稿されていた3つの動画を何度も何度もリピートしていた気がする.

輝夜月の関連動画を探している中で,以下のタイトルの動画を開いた.

YouTuberキズナアイさん、生放送中に首を絞められハム太郎になる.mpx www.nicovideo.jp

そう,キズナアイを調べているときに引っ掛かった釣り動画と同じ動画である.

よくよく見てみるとミライアカリっていうバーチャルYouTuberだと気付き最後まで見てみる.

めちゃくちゃ面白いじゃん

もっとバーチャルYouTuberの動画が見たくなり,検索すると下の動画が見つかった.

www.nicovideo.jp

上で紹介した4人の部分だけ見た.

まだまだ見たい.そう思っているとバーチャルYouTuber四天王よくばりセットという動画があることに気付く.

www.nicovideo.jp

シロ面白い

ここで完全に「バーチャルYouTuber四天王」と呼ばれる上の5人のファンになってしまった.

ミライアカリやシロの動画でニコニコで人気の動画を中心に見た.

次にはキズナアイのゲーム動画も見てみようと,下の動画を開いた.

www.youtube.com

面白くてシリーズの最後まで一気に見てしまった.

これは人気出るなぁ.

今度は他の動画でもよく紹介されているバイオ実況を見てみる.

www.youtube.com

絶叫が本当に面白い.

そんなキズナアイの動画を見ている中,シロ生放送があったことに後から気付く.

のじゃおじさんがゲスト出演し,コラボの約束を取り付けたのを見てものすごくワクワクした.

バーチャルYouTuber同士が交流して,業界全体が盛り上がっていくといいなと思った.

www.youtube.com

大晦日はミライアカリの生放送を見た.1:43:00で名前を呼ばれているのは自分

ただ応援のために1000円投げ銭を行ったのだが,名前を呼ばれるとは思っていなくてビックリした.

アイドルを追っている人たちの気持ちが今になって理解できた気がする.

バーチャルYouTuberは会いに行けないアイドルなのかもしれない.

www.youtube.com

年が明け,バーチャルYouTuber業界をチェックしてみると色々な動きがあった.

のじゃおじさんがさつき が てんこもりさんとコラボ

www.youtube.com

強烈な個性の新人たち

www.youtube.com

www.youtube.com

生放送中心の人の活動再開

まずはのらきゃっと生放送.

www.youtube.com

可愛いし誤認識が本当に面白いしでめちゃくちゃ好きになった.

今現在一番推しているのがのらきゃっとである.

次はときのそら

ときのそらはミラティブQという外部のクイズ企画でゲスト司会者として参加した.

その振り返り生放送では,応援してくれたファンに感謝し泣いてしまう場面もあった.

www.youtube.com

純真無垢なときのそらと優しいファンたちの活動によりどんどんファンを増やしている.

その同日にはキズナアイが輝夜月にコラボ申請を行ったのも衝撃的だった.

www.youtube.com

ここまででコラボを取り付けていないミライアカリがどう動くのか気になる.

そんな中ミライアカリの生みの親であるエイレーンが新しいバーチャルYouTuber動画を公開した.

www.youtube.com

動画の説明文にPatreonというクラウドファンディングサイトのリンクがあるのに気付く.

月5ドルサポートの登録をした.

こういうところでも業界に還元したい.

バーチャルYouTuberウォッチはまだまだ終わらない.

強烈な個性を持つ男性バーチャルYouTuberが注目を浴び始めた.

www.youtube.com

www.youtube.com

馬越健太郎については下の記事が詳しい.

grapefruituhr.hatenablog.com

岩本町芸能社と馬越健太郎の動きに注目していきたい.

......という感じで最近はバーチャルYouTuberをずっと追っていた.

最後にバーチャルYouTuberの楽しみ方の一つを紹介したい.

それは,Twitter上でのバーチャルYouTuber同士の会話である.

  • 美味しい位置にいる馬刺し

  • いつでも下に持っていく人

  • 後輩に優しい親分

  • のらきゃっとガチ恋勢

強烈な個性を持つバーチャルYouTuberたちをこれからも応援していきたい.

Amazonのアカウントをco.jpとcomで同じにするとKindleアプリでco.jpにログインしてくれない

新しいiOS端末でKindleアプリにログインしたらハマったのでメモ.

結論

同じAmazonとはいえ,co.jpとcomのログイン情報を同じにするのはやめよう.

発覚の流れ

iPhoneKindleを使おうとしてインストールし,ログインする.

するとライブラリに何もない表示になった.

購入済みのアイテムをそれらしき端末に配信してみるが,全く変化なし.

co.jpの方を見ると端末情報が登録されてないように見える.

新規にログインすれば端末は登録されるはずで,co.jpのアカウントに紐付いていないことに気づく.

端末情報が日本語ではなく英語だったため,昔作ったAmazon.comのアカウントにログインしてみる.

ここでco.jpで使っているログイン情報と同じにしていたことに気づき,comで使うメールアドレスを変更してみる.

ここでKindleアプリに戻り,co.jpの情報で再認証するとログイン失敗.

「パスワードを忘れた」を押し,一時的なセキュリティコードをメールで認証するとログインできライブラリが表示された.

ログイン失敗するのにセキュリティコードは通るの意味わからないけど,なんとか解決.

ログイン時の表示は日本語だったためまさかAmazon.comに繋がっているとは思わず時間が掛かった.

前から使っているiPadでは引き続きログインできていたので,Kindleアプリのどこかのアップデートのタイミングでcomが優先されるようになったのかもしれない.

もしくは前からcom優先だったが,iPadではcomのアカウントを作る前にログインしていたのかもしれない.

どちらにせよ,Amazonでアカウント情報を同じにしておくのは良くないという結論.