ソニックガーデンと私

ソニックガーデンで見習い中の坂川です。

ソニックガーデン Advent Calendar 2015 - Adventar 8日目となります。 こういったお祭りに参加するのは初めてで何を書こうかなぁと考えていたのですが、私がソニックガーデンでどんな事を考えて仕事をしているのかを書こうと思います。

開発

前職では主にJava Servletでバックエンド開発を行っていましたが、ソニックガーデンではRailsを使ってフロントエンドの開発を行うようになりました。 これまでも、業務フローをまわすための簡単な画面は作った事があるのですが、エンドユーザに直接提供するような画面は作ったことがありませんでした。

それぞれの要素がそこに存在する意味。なぜこのボタンをこの大きさ、色、文言で配置するのか。そもそもこのページは何のためにあるのか? エンドユーザに価値を提供するためには、こういった視点が必要です。 そういったことを意識して普段使っているウェブサービスをみてみると、どれも工夫があり、あ、こうやって目立たせるのかとか、この登録フローはわかりやすいなとか、今までと違う視点で見るようになりました。

仕事の進め方

今まではいわゆるマイルストーン的な長期目標の中で仕事をしていて、それぞれのタスクの粒度も大きめのものでした。 そのため、問題が後になって発覚したときのリカバーが大変だったり、今必要ではない機能に時間をかけてしまったりといったことがありました。

ソニックガーデンでは、動いて確認できるものを少しずつ開発することで手戻りを最小限にしたり方向転換をやりやすくするために、一週間単位で成果を出します。 そのためには、今本当にやるべきかは何なのかを考えて作業しないと、一週間という短いスパンで成果を出すことができません。 また、自分の開発の時間だけではなく、品質を保つためのコードレビューの時間であったり、ミーティングの時間といった自分だけで完結しない部分の時間も考慮する必要があります。

一週間という時間をどのように使うか、毎週(毎日?)カレンダーとにらめっこしています。

お客様とのミーティング

なんのために、どんなものを作るのか、今必要な機能は何か、こういったことを観点にミーティングを行います。受託とはいえ、お客様の言われたとおりではなく、本当に必要なものは何なのかを考えながら提案を行います。こういう提案は今までに経験のなかったことで難しいのですが、それだけにやりがいがあります。

また、毎週行われるお客様とのミーティングは主にSkypeを使って行っています。リモートならではの認識のずれを無くすために、開発中の機能を画面共有して見てもらったりして、意識のずれがないように注意しています。

リモートワーク

私は広島に住んでいて、ソニックガーデンの本社は渋谷にあります。 今までは会社勤めだったので、リモートで働くことはほぼ初めての経験なのですが、Remottyというツールのおかげでいつもみんな顔が見えて、リモートならではの寂しさはありません。むしろ、実際にオフィスで仕事をするよりも密なのでは?とすら感じます。 自分が分からないことをチームのみんなに聞いたり、雑談したり、同じ空間にいなくても一緒に仕事をしているという実感があります。

まとめ

このように、今までとはがらっと変わった働き方をしています。 慣れないことがたくさんあり、大変なこともありますが、こうやって頑張れるのは自分で仕事をこなしているという充実感、尊敬できる仲間達や協力してくれる家族の存在があるからです。 初めてづくしで戸惑う毎日ですが、これからも日々邁進していきたいと思います。

swiftでRGBを計算したら困った話

感の良い方なら私が何を困ったか想像がつくかもしれません。 それほど基本的な事ですが、情けない事に小一時間ほどつぶしました。

やりたかった事は一番単純なグレースケール、RGBの平均をとりたかっただけです。 コードでいうと、小学生の問題。

(red + green + blue) / 3

これが、 EXC_BREAKPOINT (code=1, ... などというメッセージと共に止まってしまう。 f:id:nof:20150306215148p:plain

ブレークポイントは入れていないのに、EXC_BREAKPOINTといって止まります。 最初は、何かxcodeが覚えているブレークポイントの位置がおかしくなったのかと思い、プロジェクトをクリアしたり再起動したりしてみましたが、状況は変わらず。

謎だなぁと思いながらコーヒーを淹れて戻り、一行づつ消して試していたら、、 f:id:nof:20150306215204p:plain

UInt8か、なるほど。255を超えたから止まっていたようです。 止まるのは良いんです。でも、もうちょっとわかりやすいメッセージが嬉しいなぁと思います。xcodeさん。

普段、こういったC言語と近いところの言語を使っていないこともあり、8ビット整数が原因だなんて思いもよりませんでした。

せっかくなのでPlaygroundでも試してみました。 f:id:nof:20150306215211p:plain

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, ... どうやら、何かがおかしいという事を知るくらいにしかメッセージは得られないようです。

swiftにtapが無い

iOSアプリ開発自体、横からちょっとつつく程度にしか経験が無かったので、ちょっと1からやってみようと思い遅ればせながらswiftを触り始めました。

触っていて、欲しいと思ったのがrubyでいう Object#tap です。 ざっと探してみましたがどうやら似たようなものが無いので、Objectにextensionしようかなと思ったら、、ん?Objectクラスなど無い。 なんと、swiftには全クラス共通のスーパークラスが無いとのこと。

へぇと思いながら、もうちょっと探してみたら良いものがありました。 Dollar and Cent

色々便利に拡張してくれるライブラリです。元のクラスを汚さないようにextensionではなく、$.func() みたいに$をprefixとして呼び出すようになっています。ちなみにextension版はCentというみたいです。 さてさて、この Dollar の中にありました $.tap が。

なぜtapが欲しいと思ったのかというと、以下のようなコードを書きたかったからです。

と、こんな感じです。 DollarはCocoaPodsのswift版みたいなCarthageでプロジェクトに突っ込むことができます。

まだいける2文字.2文字ドメイン

実は今使っているMacBookは、とあるイスラエルのスタートアップとの交渉により2文字ドメインと交換したものです。

手放してわかるのですが、短い名前のドメインはやはり使い勝手が良かったなぁと感じます。 例えばテストサーバに振っておけば、携帯等文字を打つのが億劫な端末からもストレス少なくアクセスできますし、javaのパッケージ名とか一意にしなければならないときに見た目がよろしいです。 そして、ちょっとした優越感があります。

というわけで、また取得したくなったので以下のようなスクリプトで探してみました。 find 2letter domain

ですが、適当にスリープを入れないとアタックとみなされて弾かれることもあり、時間がかかってしようがないなと思っていたところに、、

素晴らしいサイトを見つけました。 2 letter Domain Names - catechgory

現在空いている 2文字.2文字 ドメインを一覧で表示してくれています。 実際の情報は 2月上旬のものかな?すでにいくつか空いていないものがありましたが、まだまだ大丈夫そうです。

私は安めで VALUE DOMAIN:バリュードメイン で扱われていたgsドメインから一つ選んで登録しました。

さぁ、皆様もどうですか。

うん。希望退職。

初めまして。広島在住35歳プログラマです。 35歳といえば、そう気になる35歳定年説。 ちょうどそんなタイミングで、今勤めている会社で希望退職が募られ、それに応じる事となりました。

応じるかどうか。もちろん悩みました。悩んでいるうちに、はたと気がつきました。 今の自分は依存している。会社に、思考までも。

この話がなかったらどうしていたのか。それは自分の望んだことなのか。 思考を人に預けることで、楽をしているんじゃないのか。 自分の人生なのに。

それはプログラムの実装方法とかそういったことではなく、方向性といったものです。 ビジョンというとおおげさな気がしますが、どういった価値を得るために、こう考えて、この方向で行こうという一連の思考です。

そういうわけで、自分が良いと思う道筋を自分で考える。人生を人に預けないために退職を決意しました。

最後に

このblogを始めようと思ったのは、35歳決心した自分の思いを書き留めておこうという思いと、自分というものを知ってもらうには、どこかでアウトプットしなければならないということに今更ながら気がついたためです。

アウトプットしていく。これを今年の抱負といたします。

文章を書くことに慣れていません、最後まで見てくれた人がいたらありがとう。

もうひとつ

今日、会社の皆と護国神社にお参りしまして、6人全員おみくじをひきました。 すると、私を含む5人が大吉を引きました。(外れた一人は負けず嫌いなので2度ひきなおして大吉)

なんと幸先の良いことか。

f:id:nof:20150106224028j:plain