隣の芝は青いけど、うちの芝もそれなりに青かった

Wantedlyの求人をひたすら眺め、会社の良いところしか書いていないので、自分にとって不快なものやヘイトなどが存在しない良い世界を楽しんでいた時期があった。そういったものを見ていると多少なりとも羨ましい気持ちが出てくるもので、まさに隣の芝は青い現象。その一方、最近はちょこちょことITエンジニアの退職エントリがホットエントリに上がってくるようになり、それを読むのが最近の楽しみになっている。

なんだこいつ性格悪いなと思われるかもしれないが、それなりに理由はある*1。青い芝はまさに青い芝で、それでも自身の成長のために転職しますという人もいれば、青い芝も実はその家の人からすると手入れのなされていないひどい状態だったので、自分の納得できる場所へ転職する人もいる。何が言いたいかというと、その人が転職するに至った思考を知るのが面白いのである。

ホットエントリに上がってくる記事なんて、それなりに有名な人やその人自身が有名でなくても何かを成し遂げた人の記事、あるいは転職に至った経緯やもとの社内環境が劣悪だったなどのセンセーショナルなものが多い。往々にして「人」への注目が高くて上がってきたときも、その転職理由もそれなりに面白い。

以前の山登りした研修の際にも強く感じたことで、人それぞれの納得して受け入れられるラインは異なる。成功してきた人の価値観は何なのか。何を求めて、何をしているのか。それを知れるだけでも、読み物として非常に面白い。試作機を水没させて、まだ隙間があると言ったスティーブ・ジョブズのように、全世界で成功している人間の話は山ほどあるけれど、より身近で、かといって近すぎない人々の思考を知ることで、今後の自分のキャリアの参考にできると考えている。

自分に当てはめて考えてみると、隣の芝は青いけれど、まだ自分の家の芝もまあ悪くはないかなと言った感じ。同期の話を聞いていると、うちの芝は輝いて見えるし、他の企業の人の話を見聞きしていると若干見劣りするようにも感じる、この絶妙感。納得できるラインはまだちゃんと保てているし、今後の予定を見るとしばらくはそのラインで収まっているように見える。これがいつか納得できないようになったり、もっと他に、猛烈にやりたいことができたら転職するかもしれないけれど、それはしばらく先だと思う。

今後数ヶ月が一気に状況が変わり得る期間で、そこで乗り換えられるかでまた変わるとは思うけれど、それはその時の話ということで。

まあでも、俺は嘘つきだからな。


もっと流行れ。

youtu.be

*1:それでも自分自身性格は悪いと思う

2018年振り返り

早いもので2018年もあっという間に過ぎてしまいました。少し早いですが、一旦このあたりで今年一年を振り返ります。

振り返り

4〜6月 新卒研修

以前のブログでも書いたけれど、うちの会社ではエンジニアだろうと営業だろうと、すべての職種合同の新卒研修があります。ここで学ぶことは、ビジネスマナーやプレゼン、Officeの基礎スキルなど様々でした。

研修前半は比較的座学が多く、後半になると実際のワークが多くなっていき、それぞれ異なる期限が設定された課題を一度に複数与えられ(時には追加され)、期限内にどうやり切るか、上長役の社員とどう期限の交渉するかといったことを行っていました。

同期と比べて比較的残業が少なめで課題を消化できていたものの、割と精神的にもきつく、配属後ずっとこんな感じなのかと思うと結構嫌気がさしたのを覚えています。実際にはそんなことなかったのですが。

プレゼンの資料作りが無駄にうまくなったり、一番最後のプレゼンもなんやかんやあって、同期20人中の3位くらいに収まったし、これなんで総合職とエンジニアで同じ給与なんだろうなと思ったりした研修でした。

6〜8月 技術研修

今までのつらいつらい研修から打って変わって、楽しい研修の始まりだ〜〜〜とか思ってたら、ところがどっこいって感じ。

もうどういう順番だったのか覚えてないけど、設計の話とかは比較的知らないこともあったので、それなりに勉強にはなったと思ってます。それも詳しくやったわけじゃないので、結局身になったかというと微妙な気がしてますけど。講師が「わかっていることだったらなにか作業してていいよ」って言ってくれたことが唯一の救いで、それすら許されなかったらただの拷問だったんじゃないかとすら思います。

最後の2週間くらいはひたすらチームでサービス開発をする課題だったけど、PCスペックの関係で一度動作確認するにも実行に数分かかるのもザラだったのとか、チームメンバーのGit履歴修復とかが記憶に残ってます。

この研修で身につけたものってなんだろうと考えてみると、.NET Coreが少し詳しくなった程度でしょうか。AndoirdでJavaをやっていたし、バイトでJSPやらサーブレットやらをやっていたし、JavaScriptも難しい話はやらなかったし、本当にそれくらいな気がするのが残念です。

8月 配属、インターン、勉強期間

配属直前くらいに、物凄く雑な依頼が飛んできてインターンのサポートをやりました。本当に雑だったのと、それが個人のアレコレに影響してきたので、ひと悶着あったのですがそれはまた別のお話。

これに関しては、以下の記事に書いたとおりで、どうしてわざわざ書いたのかでいろいろとお察しください。

inaab.hatenablog.com

これとは別に、はじめの1ヶ月は担当プロダクトのAPIを使ってサンプルアプリを作っていました。アーキテクチャや必須で使用するライブラリが定められていた以外は、結構自由にやらせてもらった気がします。個人で作っていたときは、各タスクの時間を見積もることがなかったので、自分のコードを書くスピードを考えるいいきっかけになりました。

〜現在

割と自由にやらせてもらっていて、チームに対しての不満はあまりありません。開発チームの人数が少ないのと、比較的年齢が近い人が多いので、コミュニケーションに要するコストは少なめだし、アジャイル開発で1スプリント内での作業量も無理のない範囲なので、ほぼ定時退社に近い状態です。だいたい30分/日未満は残業をしますが、あとでフレックス制度を使って早く帰ることでペイできています。

レガシーな仕様に苦しむこともありますが、それによりなにか不都合が生じるようなら、解消するタスクもきちんと時間をとって行うこともできるので、(うちのチームに限って言えば)良い開発体制になっていると思います。

そうは言っても、ここからどうキャリアアップしていくかを考えると、このままこの会社に残らずに転職することになると思います。まだ1年目も終わってないですし、はっきりとどうしたいといったビジョンは見えないので、今後仕事をこなし、個人で何かを開発する中で見つけて行きます。

OS再インストール

今年だけで2回した。(Arch -> Manjaro -> Manjaro)

昨日1回した。

終わりに

今年は例年に増してブログを書いていた気がするのですが、技術的な内容はほとんどなかったので来年はもう少しそういうのも増やしていきたいところです。

あたりをいっちょやっていきたい。


Undertaleの曲いいよね……。

www.youtube.com

Google Apps ScriptでSlack botを作った

1泊2日で山登りをしてきたので、それをネタにしたSlack botを作った。既にそのSlackチームには複数botが存在しており、ちょっとした事情もあってか、それらはAzure上で動いているものが多い。

個人的にAzureを使いたくなかったのと、AWSの無料枠を使うのももったいないし、GCPは大きすぎるし、Firebaseは無料プランだと外にリクエストを投げられない、といろいろ考えた結果Google Apps Scriptで作成した。

完成品はこちら。

github.com

# Google Apps Script (以下、GAS)

Googleが提供しているJavaScriptっぽい何かで書いたプログラムを実行できるサービス。Googleアカウントがあれば誰でもGoogleドライブ上で作成することができ、Googleの各種サービス(SpreadsheetやGmailなど)と連携もできるので、Excelのマクロのように扱うこともできる。また、手動だけでなく、時間や外部からのリクエストなどをトリガーにして実行もできる。

以前もこんなのを作ったことがあった。

inaab.hatenablog.com

# API概要

Outgoing/Incoming Webhooksを使うのが、Slack botを作る上で一番手っ取り早い。しかし、Outgoing Webhook では文頭のトリガーワードを指定することしかできず、文中に含まれる言葉に反応することができない。今回作成したbotも、文中に含まれる単語に応答したかったため、Events APIを使用した。

qiita.com

処理フローは

  1. リクエストを受け取る
  2. トリガー一覧が書かれたSpreadsheetから、トリガーにマッチするかチェックする
  3. マッチしたトリガーに対応するレスポンスをpostする

という単純なもので、変なことをしなければわりとさくっと実装できる。

# しんどかった部分

今回、Slackとの連携やトリガー検索のためにSpreadsheetと連携のために、トークンやIDを保持する必要があったが、何を思ったのかライブラリ化してしまった。実際にはPropertiesServiceという、プロジェクトのプロパティに環境変数のように追加できる機能があるのでそちらを使うべきだった。

GASでは他に作成したGASプロジェクトをライブラリとして導入できる。Underscore.jsのライブラリなんかもあったりする。公開範囲は自分で設定できるため、自分だけに公開にするとコードを完全に分離することができる。もともとGithubとかでバージョン管理しようと考えていたため、トークンやIDの部分を含まれないようにこの構成になった。

もちろんローカルで実行する際には、何かしらでモックする必要があり、単純にそれ用のコードをかいてrequireしても動かすことはできない。というのも、JavaScriptっぽい何かであって、ブラウザ/nodeのどちらとも異なっており、GASではトップレベルに書いた関数を実行する方式だからである。そういうわけで、ブラウザでも実行できず、nodeのrequireも使うこともできない。

browserifyと、それで生成したものを実行できるように変更してくれるgasifyを利用して、グローバル環境をglobalに入るようにしているため、別途tryRequireという関数を実装した。

module.exports = function tryRequire(modulePath, moduleName) {
  if (global[moduleName]) {
    return global[moduleName];
  } else {
    return require(modulePath);
  }
}

ライブラリを使用している箇所で、globalにこいつを先に読み込み、この関数でrequireする。

global.tryRequire = require('./try_require.js');
const Token = require('./token.js', 'Token');

この解消に一番時間がかかったし、しんどかった。

# 感想

Web系の開発は結構用意するものが多いせいでしんどいイメージがあったけれど、これくらいだったらある程度は楽に作れるように感じた。これが単純なbotだったから良かったものの、これより大きいものをやろうとするとさすがにしんどすぎるのでやらないと思う。

今度個人で何かフロントエンドを実装することになったら、Elmが楽しそうな感じがしてるのでそっちでなんとかやる。


ニューアルバムでたぞ

youtu.be

IT系の開発職インターンに必要と感じたこと

先日インターンの講師をしたので、そのときに感じたことを記した怪文書

本記事では業務を実際に行うものではなく、講義やハッカソンで行うものを主対象としている。

ターゲットの設定

メインターゲットととなる学生を明確に設定しなければいけない。これが出来ていない状態で行うと、内容と学生のレベル感が噛み合わず、お互いに損することになってしまう。

簡単に以下2つを考えてみる。

  • どのくらいの技術レベルなのか
  • 参加する学生は何を目的として参加するのか

技術レベル

技術レベルに関しては、「授業でC言語をやったことがあります」という学生と、「今こういうのを作っています」という学生だったら、おそらく後者のほうが技術を知っている可能性が高い。ここでどちらを選ぶかによって、当然インターンで実施する内容も変わってくる。前者であれば講義形式やハンズオンで一つのWebサービスを作るでもいいし、後者であればそれに加えてハッカソン形式でも問題ない。対象のレベルに合わせて選択肢が増えるだけである。

ここで注意したいのが、必ずしも後者のほうが良いわけではないということで、場合によっては前者のほうが良いこともある。

学生で興味を持って自分で何かを作る人は、最新の技術を使いたいとか技術レベルが高い企業で自分のレベルも上げていきたいと考える人が多い。そういった学生が興味を持ちづらい業界だったり、そもそもの企業知名度が低かったりすると、技術レベルが高い学生というのは集まりづらい。その状態でハッカソンをやったところで、結局ゴタゴタしたまま終わってしまうことが多く、学生からも自分には難しいかもと思わせてしまい、印象もあまり良くない。

講義やハンズオン形式であれば、あまり技術習得度の高くない学生でもある程度のものは完成するので、インターン参加後の印象も悪くない。また、企業側としても参加前の状態からどの程度理解して実践できるようになったかを見て、その学生の理解力や読解力などの基本的なスキルを見ることができる。

実際のところ、新卒に即戦力を求めてはいけないと思っているので、入社後の成長に寄与する読解力を見るのは間違いではないと個人的には考えている。

参加目的

技術習得度の話と少しかぶる部分もあるが、以下のようなことが考えられる。

  1. 就活を有利に進めるため
  2. 会社の雰囲気を知るため
  3. 実際の業務を体験するため
  4. 技術習得のため

それぞれは独立しているわけではなく、複数あるいは全ての場合すらある。

就活を有利に進めるため、会社の雰囲気を知るため

はじめの2つに関しては、就活を有利に進めるためなんてのはどうせどの学生も考えているだろうし、会社の雰囲気を知るために来るのはお互いにとって良い効果があるので、特記することはない。

実際の業務を体験するため

業務を体験することができるインターンはあるものの、昨今のコンプライアンスとか諸々を考えるとそこまで数は多くなく、そのインターンに参加する学生には既にある程度の実装をできることが求められるため狭き門となる。企業側にとっても、ターゲットが技術習得度の高い学生かつそのような学生にとって魅力度の高い企業でなければ実施自体が難しくなる。実施にあたって一時的に現場へ新人が配属されるのと同じ状況になる上、各学生に対して適切な課題を考える必要もある。

そのあたりの調整がうまくできれば、学生満足度も高く、企業側にとってもいい感じに採用に役立てられるんじゃないだろうか。

担当したのがこれ系のインターンじゃないのでわからない

技術習得のため

技術習得のために来る学生は、必ずしも技術レベルで述べた技術習得度の高い学生とは限らない。大学の授業でしかプログラミングをしたことがない学生が、業務で必要とされる技術を習得するための足がかりにすることだってあるだろうし、もともと個人で制作をしていた学生が、個人では触れる機会が少ないものを知るために来ることもあるだろう。

少しかぶる部分があるとしたのはこの部分で、学生がインターン参加を検討する段階で自分の目的と合致するかを考えるためである。このインターンは何を売りにしているのか、どのような技術を使うのかなど、学生の参加目的とのミスマッチを防ぐ必要がある。

企業側がこれを怠り、とりあえず優秀そうな学生に声をかけて参加させて実際の内容とのミスマッチが起きていたら、学生にとっては、お金が貰えたけどあまり良くなかった、あるいはただ時間を浪費しただけになってしまう。結局学生が入社することもなくただ社内のリソースを割いただけで終わる。

ターゲット設定と同様に、明確なインターンの「売り」を設定するべきである。

まとめ


これを聴いてた。

youtu.be

Barocco MD600を買った

研修でそれまで使用していたPCがあまりにアレだったので、配属後にどうなるかひやひやしてたのとは裏腹にiMacが支給された。そこまでスペックが良いとは言えないけれど、それまでのPCよりもはるかには良くなった。

一月ほどiMacに付属していたMagic KeyboardとMagic Trackpad 2を使ったけれど、どうにもキーストロークが浅すぎて指が痛くなってしまう。適当に調べて見た感じ、家のX1 Carbonのキーボードとはストロークが1mmほど違うらしいので、それと同じ感覚で入力していれば痛くなるのも当然といえば当然。

家にあるHHKB Lite2でもよかったのだけれど、前の席に座ってる上司の机の上にHHKB Professionalが使われずに放置されていて、その眼の前で使うのもどうかと思ってBaroccoを買った。

f:id:Inaab:20180917204645j:plain

日本語配列なんですねって聞かれたけど、変換/無変換キーで日本語入力のon/offを切り替えたいとか、日本語配列に慣れていてわざわざ英語配列を使う必要もないので、いつもどおり日本語配列を買った。

ちょうど割れる部分のキーについては、変な運指をしていないので問題なし。

キーボードだけで配列を変更でき、Windows専用のアプリケーションでしか変更できないとか、めちゃくちゃ面倒な設定ファイルを書く必要がないのはとても良い。一方で一度わからなくなったら、そのレイヤーのカスタマイズをすべて消さなければいけないので、めちゃくちゃカスタマイズする人には向かないと思う。

自分の場合、

  • 共通:CapsLockをCtrlに変更、Fnを左下の位置に移動
  • レイヤー1(Linux):共通変更のみ
  • レイヤー2(Mac):共通変更+OptionとWinキーの位置交換

だけ変更した。家で使う分には今の所問題がないので、たぶんこれ以上の変更は無いと思う。

初めてのメカニカルキーボードで軸をどうするか悩んで、いろいろとビックカメラで試し打ちをした。

さすがに青はうるさすぎるし、黒は重すぎて途中で疲れそうになったのでやめた。消去法的に赤か茶だけど、クリック感は別に求めていないし、正直なところあまり区別がつかなかったし、会社で使うことを考えると静かな方がよかったので静音赤軸にした。それでもMagic Keyboardよりもうるさいけれど、一応許容される範囲かと。

打鍵感もいいし、肩が丸まらないので結構満足。左右をつなぐケーブルが若干短いので、いい感じのノートパソコン台+マウス or ワイヤレストラックパッドがないとちょっと扱いづらい雰囲気があるので、そこは追々揃えていくということで。


youtu.be

昔に思いを馳せて

この記事を呼んで、ふと私が初めてパソコンに触れた頃のことを思い出した。

time-space.kddi.com

インターネット古参、老人会の人に言わせればまだまだ新参ではあるが、つらつらと思い出を書いていこうと思う。


初めて触れたのはおそらく小学3年生くらいの時期で、2002年か2003年のことであるから、今からかれこれ15年も前のことになる。当時実家にあったのはWindows 98が搭載されたノートPCであった。その当時ですらやや性能も悪く、ボンバーマンのオンラインゲームのページを開いただけでIEが応答なし、強制終了するしかなくなったことは、今でもはっきりと思い出される。

所属していたバスケ部の活動予定表が印刷されて配布されており、所属している誰かがボランティアで作成していたが、いつしか自分が作るようになっていた。Excelで作成されており、表計算以外に使うなと言う意味で今となっては怒られることかもしれない。

いつから始めたのかはわからないが、当時小学3,4年の私が作ったことで親は褒めてくれたし、他の保護者からも凄いねと言われるのが無性に嬉しかったことを覚えている。その経験があったからこそ、今の自分に繋がっているのは間違いがないだろう。


先に紹介した記事にもあるように、ちょうどインターネット常時接続が出始めた時期だった。実家ではケーブルテレビに加入しており、その恩恵を得られていたことも大きい。まだ従量制の家庭も多かったし、電話が来たら回線が切れる家庭もあったので、当時から比較的快適なインターネット生活を送れていた。

いわゆるFLASH黄金世代が終わりかかっていた時期なので、友人といろいろなものを見ては腹を抱えて笑う、あるいはドッキリ系でビビっていた。

私が親だとしたらあまり見せたくないな〜と思うコンテンツもあるが、今のインターネットよりはなんだかんだマシなのかもと思ってしまう。


ところで皆さんはッパえもん赤い部屋が公開されているYahoo! ジオシティーズをご存知だろうか。

当時無料でWebページを公開できる場所で、かつ過度な広告が無い場所として人気であった。今でこそ無料で広告が少ない(あるいは広告そのものがない)レンタルサーバは多いものの、尋常じゃない広告が表示されたり、開設には審査が必要だったり、大学生が勉強のために公開したサーバが一瞬で定員に達したりとそういう時代だった。

ジオシティーズはページ上部などにバナー広告がはいるだけで、レイアウトが崩れるようなことはなかったし、HTMLを知らなくてもそれっぽくページを作れるし、と自分もお世話になったことがある。

今でもサービスは継続しているが、果たして利用者はどれくらいいるのか疑問ではある。


時は少し飛んでガラケー全盛期。中学2年生になりケータイを手に入れた私は、当時の流行りであった前略プロフィールを作成していた。なんとなく色々入力するの恥ずかしかったので、あまりプロフィール自体は入力していなかったものの、「リアル」と呼ばれる日記投稿システム*1や友人のプロフィールへのリンク集、誰でも投稿できるゲストブックなどは作っていた。

curazy.com

前略プロフィールに関して、今でも鮮明に思い出されることが一つある。

私の中学校は少し「荒れていた」ので、いわゆる不良も多かった。野球部が集団で下校しているとき、校門から見えない位置に曲がった瞬間に全員がタバコを吸い出すのを目撃したこともあったし、先生に掴みかかっていく人間もいた。それでも同学年の生徒同士では表立って衝突はなかったので、極端な騒ぎにはならなかったが。

もちろん、男子だけでなく同じようなマインドの女子もたくさんいた。

「リアル」で鍵をかけて一部の人間の悪口を言う、ゲストブックに喧嘩腰で書き込む。まとまっていないだけである種の裏サイト化していた。ゲストブックに「調子に飲んなよブス」と書き込まれれば、「お前ネットでしか言えねーのかよ」と書き込み、「じゃあx時にxx(近所のスーパー)にこいや」となる。「なんでxx(近所のスーパー)にこねえんだよ」「は?お前がこなかったんだろうが」と傍目に見ればアホみたいな会話をインターネット上で繰り広げているわけである。

自分が同じことをやっていないからこそ笑い話にしているが、当の本人たちからしたら黒歴史にほかならないだろう。田舎の人々は結婚も子供ができるのも早いので、ほとんどが結婚して子供もいるのだろうけど、彼女たちのいい思い出になっているのだろうか。

私はべつのことで黒歴史のようなものがあるので、今でも思い返すと頭を抱えてしまう。


単純にいくつか書いてみたけれど、インターネットのリソース、たとえばWebサーバとかは簡単に利用できるようになっていい時代になったと思う。少しコマンドを叩けばGithub Pagesなんかでホスティングできるし、Jekyllのようなツールもたくさんあるし。

一方で、インターネットの利用方法で強く咎められる時代になってしまったとも思う。一般に普及して誰もが利用できるようになったことで、リテラシーがなくても使えるようになった。ネチケット()と笑われることもあるだろうが、今こそ必要な時代になってきていると感じる。小さな悪意を持って行動すれば、小さな悪意の群れが大きな悪意となって襲い掛かってくるし、そもそも小さな善意や正義感が集まって牙を向いてくることも往々にしてありえる。

なにはともあれ、もっと人に優しいインターネットになってほしい。


勢いに任せて書いていったら、長いだけで中身が無いエントリを書いてしまった……。

youtu.be

*1:今で言うとTwitterが利用感覚的に近い

良い雰囲気のなんかを作りたい

なんやかんやあってブログを書こうと思って、この土日やってたAndroid系の話を書こうか、それとも最近の業務ででたバリデーションについて書こうか、どうしようかと悩んでいた。 結局前者はまだ記事にするには区切りが良くないし、後者は実際に調べてコードを書いてとなったあたりでどうにも面倒になってしまった。

もう書かなくていいか〜と思って、先日レンタル落ちで購入したSteins;Gateを見てピンときたので、それについて書く。

www.amazon.co.jp


人の心に残るものを作りたい、と常々考えていた。それは例えば日頃利用するアプリケーションなどではなく、どちらかというと絵や音楽、ゲームなどの創作活動の分野。もちろん、何か圧倒的な体験を提供できるアプリなどであれば、人の心に残る、感動させることもできるだろうが、あくまで個人的な思いとしてである。

言ってしまえば、ただの憧れであり、ワナビーのようなもの。

そもそも幼少期から「我が家ではそういうのができる人間はいない」などと家族内で会話されていたこともあり、自分もそれに取り組もうという気持ちがあまりなかった。 一時やっていた時期もあったが、それを続けられるだけの気力がなく続かなかった。

そんな中で出会った、魔王物語物語 *1というゲーム。

playism.jp

RPGツクールという、悪く言えばよくあるツールで、フリー音源も使いつつ(もちろんフリーじゃないのもある)作られたこのゲームで、甚く感動した。ストーリー、システム、音楽、どれも良い。

超美麗なグラフィックもなく、至極壮大な音楽もなく、物語の魅せ方で人を感動させる。

自分もそんなものを作りたいと思った。


それからどうなったかというと、途中ゲームプログラムを書いていた時期もあったが、その夢には辿り着かなかった。

一朝一夕ではできないとわかっているが、自分だけではモチベーションが保てなかった。正確には自分だけではなかったものの、モチベーションを保つには至らなかった。

最近、創作活動をしている友人や同期をみて、さらにSteins:Gateをみて、久しぶりに色々と考えたけど、さーてどうすっかな。


とりあえずみんなADAM atを聴いてくれ。

youtu.be