Category Archives: 開発一般

株式会社プラスアールでは、iOS ( or Android or PHP ) のエンジニアを募集しています。
http://www.plusr.co.jp/recruit

今回も下の問題が解けたら書類選考なしにいたします。さらに、面接の際にバックジョイをプレゼントしちゃいます。

image_backjoy

求人への応募はしないという方でも、問題が解けた&弊社まで景品をとりに来ていただけるようでしたら、先着10名様に限りバックジョイをプレゼントいたします。

こぞってご応募ください。

[問題]

以下の表はそのマスとその周囲8マスに含まれている爆弾の個数を表しています。フィールドに含まれている爆弾の位置を(x,y)としたとき、その積k(=x*y)が小さい順にアルファベットを並べるとある単語が完成します。

マインスイーパの説明

解けた方は次のメールアドレスまでご連絡ください!
[完成したメッセージ]-[kの総和]@plusr.co.jp
※[]は要りません。
※作成したプログラムのGithubへのリンク又は、プログラムを添付してください。
※面接の日程についてはメールで調整致します。

求人に応募しない方は、”解けた!”というご連絡だけでも構いません。
景品だけ希望の場合はその旨ご記載ください。
例:「景品ほしい」

よろしくお願いいたします!

※求人の定員に達し次第終了しますので、解けた方はすぐにご連絡下さい。

1 2 3 4 5 6
1  1 i  2 p  2 a  1 g  1 x  1 u
2  1 c  2 t  2 e  2 h  2 r  2 a
3  1 g  2 q  1 i  2 r  3 n  3 z
4  2 r  2 d  2 g  2 o  3 e  2 o
5  2 v  2 n  2 o  1 w  3 y  2 s
6  2 b  2 t  2 r  1 p  2 w  1 a
7  2 g  2 u  2 i  1 x  3 q  2 u
8  2 e  2 t  2 s  1 m  2 x  1 n

Android担当のseitoです。最近弊社ではCordovaを使ったアプリ開発に力を入れています。

今回はそのCordovaでCIを回したくてDocker+werckerでCI環境を作ってみました。

ざっくりとした手順は

1 werckerで呼び出すDockerイメージの作成

2 作成したDockerイメージをDocker Hubへプッシュ

3 wercker.ymlファイル作成

です。

 

1 werckerで呼び出すDockerイメージの作成

Docker Toolboxが入ってる前提で進めます。
まずはベースとなるOSを取得します。
Docker Quickstart Terminalを開きます。今回はCentOS6をベースにします。

docker pull centos:centos6

ダウンロードが始まります。しばらく待っているとダウンロード完了。
実際にダウンロードできたのか確認します。

$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos                    centos6             2f96ee8baf17        2 weeks ago         228.9 MB

無事できました。
次に先ほど取得したイメージからコンテナを作成します。

docker run -it centos:centos6

上記コマンドを実行すると作成されたコンテナ内のターミナルが開かれると思います。
実際にコンテナが起動しているか確認してみます。ctrl+p+qを押すとコンテナを起動したままコンテナ内のターミナルからexitできます。
コンテナが起動しているか調べます。docker psを使います。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a6f43b17c7e5        centos:centos6      "/bin/bash"         17 seconds ago      Up 16 seconds                           evil_hypatia

コンテナが起動してるのがわかりますね。
それではこのコンテナにモジュールを色々入れていきます。今回はCordovaでionicというフレームワークを使用しているので
ionicコマンドが打てるようにしたいです。
なので今回は
・node.js
・npm
をインストールして
・cordova
・ionic
です。それでは再びコンテナに入ります。
起動しているコンテナに入る時はdocker attachを使います。

$ docker attach a6f

ログインできました。
次にnode.jsをインストールします

# rpm -Uvh https://rpm.nodesource.com//pub_4.x/el/6/x86_64/nodesource-release-el6-1.noarch.rpm

現時点で生きてるrpmです。

# yum install nodejs

インストール後、動作確認します。

# node -v
v4.4.3

問題なさそうです。
続いてnpmも入れます。

# yum install -y npm

動作確認します。

# npm -v
2.15.1

後はnpmでcordovaとionicを入れるだけです。

# npm install -g cordova
# npm install -g ionic

ionicコマンドが打てればOKなので確認

# ionic -v
1.7.14

できました。
それではこのコンテナをイメージにしたいと思います。
docker commitを使います。
一旦ctrl+p+qでコンテナから抜けます。

$ docker commit a6f plusrseito/sample

イメージ名は適当です。
イメージの確認を行います。

$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
plusrseito/sample         latest              40775aeb5d44        21 seconds ago      631.8 MB

これでDocker Hubへ上げるコンテナができました。

2 作成したDockerイメージをDocker Hubへプッシュ

できたコンテナをwerckerから呼び出せるようにDocker Hubへ上げます。
Docker Hubのユーザ登録手順は省きます。

まずログインします。

$ docker login

docker pushでローカルにあるイメージをDocker Hubへあげます。
先ほど作ったイメージをあげます。

$ docker push plusrseito/sample

今更ながらもうちょいまともな名前にすればよかった。
コマンドを叩くとアップロードが始まります。
作ったイメージのサイズによりますが、けっこう時間かかります。
完了したらDocker Hubのダッシュボードでイメージが上がっているか確認します。

スクリーンショット 2016-04-20 11.14.47

無事アップロードできました。既に2回プルされてるのは何だろう?と気になりつつもスルーします。

3 wercker.ymlファイル作成

前提として、対象プロジェクトのリモートリポジトリをwerckerと関連付ける作業が終わってるものとします。

実際にCordovaのプロジェクトで作ったDockerイメージを使っていきます。
Cordovaのプロジェクト直下にwercker.ymlを作成します。

wercker.yml

box: plusrseito/sample
build:
  steps:
    - script:
        name: check ionic version
        code: |
          ionic -v

今回はサンプルなのでバージョンチェックのみです。
wercker.ymlを追加したら変更をコミット・プッシュします。
werckerの対象プロジェクトのページでCI状況を確認します。

スクリーンショット 2016-04-20 11.24.51

スクリーンショット 2016-04-20 11.27.36

ビルドに成功してますね。
これで自分で作ったDockerイメージを使ってwerckerでCIする環境が整いました。

注意点として、wercker.ymlに記述するコマンドは一度Dockerコンテナ作成中に試しておくことをお勧めします。
ionic state resetやionic build等を使ったときにnpmパッケージが足りないというエラーが出てはまりました。
docker run でvオプションを使うとローカルディレクトリとコンテナ内のディレクトリを同期できるので、自分はその方法で
プロジェクトを取り込み動作確認してからDocker Hubに上げるようにしています。

それでは良いCIライフを。

チーム開発を一つの生産機関だとすると、
企画→仕様化→実装→テスト→リリース→改善
みたいなサイクルになります。これを最大化するにはどうすればいいか?

結論から言うと
「何かしらの尖った開発スタイルを持つ」
だと思ってます。
最大化、なんていう発想でいると、全方位なんとなく改善、みたいになります。
戦ってる市場に合わせて、「何の領域を高めるのが一番勝てるのか?」を考えてスタイルを構築するのが重要。

先日、あるエンジニアが、本人がターゲットユーザのど真ん中だったこともありますが、土日でささっと機能追加をしてきました。で、このクオリティが非常に高い。

以前から、
(ユーザ側担当者が)仕様を決めて→(エンジニアが)実装して→(ユーザ側が)テストして→(エンジニアが)直して
これがもうほんとーーーに遅い。遅すぎる。
とキレてました(実際は全然怒ってないですがw)。
そんな日常の悩みを吹き飛ばしてくれるクオリティでした。
え、こんなのが速攻で作れんの…?と思いました。

エンジニアとユーザ側の間にいるディレクターとしてはなかなか悔しい話でもあるんですが、一つの「高い開発力」はこういうことだと思います。
すなわち、「ユーザ側」と「エンジニア」が「同じ人」であること。
生産性と儲ける力で圧倒的存在になってる前職開発の教えの一つが、「なるべく一人の把握範囲を増やす」でしたが、それを思い出しました。
それだよ…!と8回ぐらい言ってしまった。

スマホアプリのUXで勝負するような開発は、作ってもすぐ真似しあってて、レッドオーシャンです。
できれば、一度制覇したらしばらく勝ち続けられるアプローチにしたいところですよね。

時々起きる奇跡のような生産性を何とか常態化し、一定の開発ノウハウ、開発スタイルを確立していきたいところです。
そうすれば「意外と結構勝てるはず」なんて思っています。

弊社の採用募集枠タイトルの一つに
月曜日が楽しみになる仕事、しませんか?
というものがあります。

とあるメンバーが考えたコピーで、弊社の長所をよく表現している物だと思いますが、
これは、自分がちょくちょく零している
「平日が終わってしまった…早く月曜にならないかな…」
等のつぶやきを元にした物とのことでした。

自分は以前、ガチガチの「効率と結果を追求」する組織にいました。
それはそれで、刺激や成長や興味や面白い人が多く、非常に濃い時間だったのですが、
約束を守り責任を果たしきれるかといった不安、競争から逃げたい気持ち、等から、
日曜や月曜朝はかなり憂鬱でした。
休み明けが辛い、というのは多くの方が経験している感覚だと思います。

では、現職になって仕事量がそんなに変わったのか?
というと、そうでも無いです。
共働きに変わり育児の時間が増えた分、もしかすると減っているかもしれませんが、
通勤の間や家にいる時間も、「完全に前向きな気持ちで」
かなりの時間、仕事のことを考えていたり、実際に手を動かしていたりします。
こんな考え方もできる。いろんなことを試したい。。等。
そして、実際に仲間と一緒に働ける金曜が終わってしまうのは本当に寂しいし、
月曜がくるのは待ち遠しいです。

ベンチャーならではの柔軟な働き方が前提にある、心構えですね。
(この辺りは、社長のブログにもイメージが書いてありますね)

ところで、技術者として
「どんな時に夢中で動いていられるか」
というのは、とても大事な要素だと思います。
早く実物にしたい、改善のプロセスが好き、議論が好き、
快適な場所でずっとコードを書いていたい…等々。

僕は、この要素が、技術者としての強みを決定づけていると考えています。
トラブル解決こそ真骨頂な人、
コードの美しさの為なら早出残業など厭わない人、
プロトタイプを出す速さがとんでもない人、
何でもできて話が早く遊び心溢れる人、
絶対の安定性で計画を全く落とさない人、、
こういう傾向は、「仕事で何をしている時が一番楽しいですか?」という質問をした時の答えと、
無意識だと思いますが、面白いぐらい繋がっています。
言語や技術領域ではなく、役立ちの種類が人それぞれの仕事のタイプと感じます。

そして、こういった「夢中からくる強み」が、「仕事の中心」になっているか。
これが、「日々の仕事が楽しいか」を決めていると考えています。
夢中でやれることなら、オンオフなんて関係なくなりますよね?
で、実際に成果、出ますよね。

マネージャーとして、成果が出る上にメンバーが夢中で働ける、
という形は理想です。
常にこれを目指して、課題設定、目標設定、開発ディレクション、日々の議論、
日々の雑談(?)、、をやっているつもりです。
新卒エンジニアへ ということは、既にどこかに就職している皆様かと思いますが(笑)、
「本当にこれが生産的なのか?」等自分の働き方に不安を感じたら。
ぜひ一度弊社エンジニアの顔色でも見にきてみてください(ドヤ顔)

最後に
「こんなCTOがいる職場で働きたい」っていう観点、いいですよね。
就職先選びの決め手は、
職種や業種や業務内容や条件ではなく、絶対、
「どんな人と働けるか」
ですよね。
wantedlyは「とりあえず会ってみる」ができる素晴らしい仕組みだと思います。
(企業側は結構大変ですが(笑))

(※この記事はwantedlyのブログ用に作成したものです)