0からアプリ開発はじめた

全くの初心者がアプリ開発をはじめました

ISUCON5でわからないということがわかった

 

f:id:comicbook:20151002035441g:plain

 

このブログを最後に更新したのが、6/8

もう4ヶ月も前かぁ(遠い目

 

その間に転職しまして、この度「ISUCON」に参加してきました。

チーム名「ビールはホップ使ってるからサラダ

 

結果として、わからないということがわかりました(ぇ


3人で参加したのに、全く何もできずに本当に申し訳なかったm(_ _ )m

気づけば長々となってしまったのでお時間ある方お付き合いください・・・

 

ISUCONとは

 

Iikanjini Speed Up Contest

 

Webシステムをいい感じにスピードアップさせてそのスコアを競うコンテストです。みなさんお馴染みのLINEが主催していて、優勝賞金はなんと!!

 

100万円!!!! (太っ腹

 

べ、べつにお金につられたんじゃないんだからね!!!! 

 

参加に至った経緯

正直、転職前はROM焼きとかやってた人間なのでネットワーク系はチンプンカンプン。Linuxもド初心者という状態です。

 

いろいろ勉強したくて社内のISUCON部の見学に行ったら、参加することになりました。

 

ヽ( ´ ∇ ` )ノ ワーイ

 

参加するまでの準備

毎週火・木にISUCON部の活動をやってました。部に参加し始めたのが9月頭?くらいで、全く0の状態からスタートした感じDeath

 

部に初めて行った時にISUCONについて教えていただきました。


ひたすらにブクマをつくり続ける感じ

 

f:id:comicbook:20151002003057p:plain

 

イイね!!

 

ISUCON3の予選問題やってみる

3チーム作ることになり、チーム分けどうする?となりました。協議の末、ISUCON3の予選問題やってScore順で決めることに。

 

予選登録が18日締め切りだったので、それまでにやることが決まりました。自分は14日に実施。

 

結果。。。

 

AWSの使い方が全くわからず、開始したはいいけどずっと画面とにらめっこして終了。

 

ハハハハハ!!!!

 

...orz

 

後日、部でのScore発表時に id:pe10 さんにご教授いただき、ベンチマーク動かせました。

 

Score 903.03

 

部内にScore 9,000overの方もいて単純にすごいなという印象でした。このScoreを元に以下3チームが誕生。

 

・ピザはバランスいい

・牛は草食ってるから野菜

・ビールはホップ使ってるからサラダ

 

GCP使ってみる

次にやったのがGCPを使うことです。ISUCON5はGCPで実施することが事前に分かっていたので、準備しなきゃと。

 

アカウントを取り、公開されていたISUCON4のgsをつかってインスタンスを起動。ベンチマークを動かしてみてScoreが出るところまでやりました。

 

当日の動き

頭動かすためにも甘いものが必要だよね⭐︎

てことで、ブラックサンダー3袋くらい持参していきやした。

 

10:00 開始時間 〜ぼっち党員〜

予選開始時刻になったがチームは自分1人。


とりあえず、やるしかねぇ!!

 

事前に通知されたURLにアクセス

ログイン画面が表示されたのでメールに添付されたパスワードでログイン

 ↓

が、入れず!!

 

ん?

 

ログインパスワード:>aiZIeytbg0q

 

>

  

この記号、パスワードなんかい!!

 

とりあえず、指定されたgsつかってGCPインスタンスを立ち上げました。

 

11:30 初めてのRequest 〜終わった感満載〜

今回ブラウザでベンチマークをRequestして実行する仕様でした。準備するのも遅いし初めてのRequestもこんな時間で、ダメダメ感が半端ない。


早速Requestしてみました。

 

f:id:comicbook:20151002012817p:plain

 

おぉ、なんか他のと色違いで表示されとる。ぽけーっと眺めてチラっと更新っぽいのが走ったので確認。

 

ドンッ⭐︎

 

f:id:comicbook:20151002012916p:plain

 

Score 68

 

初期実装がこんなに低いと思ってなかったのでまず驚愕。(結局、他チームの初期Scoreみるとそれぐらいだったのでミスってはなさそう)

 

そう!!

 

ここで、自分のISUCONは終わりを告げたのです(ぇ

 

1人でできることはコードを読むことだけ、できることを必死に探してました。

つらいお。。。

 

13:00 チーム2人目合流 〜ようやく動き出した感〜

これ以降の作業は主に2人目の方が中心となって実施してくださいました。打ち合わせとか全く0の状態だったので、やり方などを確認しながら進めました。準備が整った段階で、どのようなアプローチで進めるかを確認。


といっても、自分にできることがなかったので話を聞く体制を整えてました(ぇ


どんどんと進んでいく作業

 

・systemdで実行中なのがRubyであることを突き止め、PHPに換装

mysqlにrootなら入れるでしょっとサクッと入ってテーブルの構成をさらっと書き出す

・コード上のクエリをEXPLAINで調査

・indexが全然貼られていないから貼る必要があること判明

 

ものの1時間くらいでここまでできるのが当たり前の業界にいるんだと口ポカーン状態。

 

15:00 チーム3人目合流 〜休憩も必要だよね〜

3人目の方が業務を終えて参戦していただけることに。GCPアカウントがなかったのでどうする、どうするとなりましたが、インスタンス上でアカウントを作成し、ssh接続に成功。

 

やれることやっちゃえの空気ができて、sambaも導入(ぇ

 

しかしながら、もはやアプリケーションをいじる時間もない...ベンチマークのページをみると積み重なるRequest

 

スッとRequest投げてコンビニへ(ぇ

 

戻ってきてScoreみると600くらいで10倍くらいにはなってました。indexすげぇ

 

そこからアプリ以外で高速化できる方法はないかとgoogle先生で調べる。nginxの高速化設定を見つけ、その他もいじって試してみるとScore 900くらいに。

 

18:00 終了時間 〜もうゴールしてもいいよね〜

終了間際

Requestを何度送ってもScoreが「0」でなんでだ、なんでだとなりました。原因がnginxのエラーだとわかり修正を試みます。


が、なぜかrootなのに編集できず。

 

あれよあれよと終了時間を迎えました。。。どうやらkernelをいじったことで何がしかのファイルが破損してしまった模様orz

 

学んだこと。


こういうことは...

 

ダメ、ゼッタイ。

 

あと、

 

大事、事前準備。

 

結果発表

「ピザはバランスいい」が堂々予選突破!!

「牛は草食ってるから野菜」も一時、Score1万に近づく好成績

 

いやー、マジすごい

 

まとめ

冒頭で述べた通り、わからないということがわかりました

井の中の蛙しかり、知らないことをどんどん吸収していかないとダメだと改めて痛感しました。

ISUCON5に出たことでいろいろとわかったのはかなり良かったです。

 

1年後にも是非出たい、というか出る

 

そのためにもチューニングする知識をどんどん得たい。

 

無知からの卒業。

 

これだ!!

 

当面の目標はWebアプリの高速化について

・プロファイリング(ボトルネックの抽出)

・スロークエリの改善

ミドルウェアの調整

以上が効果的だそうなので、「ひとりでできるもん」と言えるくらいまでやります。

【開発】全くの0からアプリを開発するまで【第2回】続!開発環境整備

みなさん、こんばんは。
忙しい時期が終ると途端に手が空くのもなんだかなぁと思う今日この頃です。
手が空いているうちに自分のためにできることをやります。
 
ということで、第1回からかなり間が空きましたが、第2回目です。
アプリ開発に向けて、企画を行う予定でしたが、前回に引き続き開発環境の整備を行いました。今回はWebサービス系の導入が中心です。
以下のサイト様には特にお世話になりました。

engineer-intern.jp

上記サイト様の進行に合わせていき、おおよそ開発環境が整いました。知識不足で引っかかった箇所があったので今回はそちらを記載します。
 

テキストエディタの導入

プログラム書くにもまずテキストエディタが無いと始まりません。
初勉強会でmac持ってて、コード書いてたのがメモなんて恥ずかしくて言えません。
今回は参考にさせていただいたサイト様の進行に則って、「Sublime Text」をインストールすることにしました。
 
なお、英語が苦手な私は速攻日本語化です。
日本語化については以下のサイト様を参考にさせていただきました。
Windowsユーザーのため、Program filesに慣れすぎていていろいろ大変な目を見ました(苦笑)

qiita.com

以下のコマンドを入れることで、コマンドを短縮できるのはかなり勉強になりました。
sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/bin/subl
無事にインストールが完了し、早速この間齧ったばかりGo言語でプログラミングです。
プログラムの最初といえばコレでしょう。
package main
import "fmt"
func main() {
fmt.Printf("Hello, world\n")
}
すでに「go」はインストール済みだったのでターミナルで実行。
$ go fmt untitled.go 
$ go run untitled.go
Hello, world 
久々に書きました「Hellow, world」
表示されると感慨深いものがあります(笑)
 

Apache+PHP環境を構築

mySQLの導入までは問題なく進行し、Apache+PHP環境作成で若干手間取りました。
ApacheおよびPHPインストール完了後、「http://localhost/」に接続する段階でApacheは起動しているのに「サーバーが見つかりません」と表示されました。
この場合、ファイアウォールによりポートが制限されている可能性があります。
http://localhost:8080」とポートを指定することにより動作を確認しました。
(※)知ったかぶりで書いてる可能性があります(ぇ
 
次にハマったのが、Apache+PHPのエラーです。
 

httpd.conf」にLoadModule PHPの格納場所を追記してApacheを実行すると以下のエラーがでました。

httpd: Syntax error on line 117 of /usr/local/etc/apache2/2.2/httpd.conf: Cannot load /usr/local/Cellar/php54/5.4.41/libexec/apache2/libphp5.so into server: dlopen(/usr/local/Cellar/php54/5.4.41/libexec/apache2/libphp5.so, 10): Symbol not found: _ap_unixd_config\n Referenced from: /usr/local/Cellar/php54/5.4.41/libexec/apache2/libphp5.so\n Expected in: /usr/local/Cellar/httpd22/2.2.29/bin/httpd\n in /usr/local/Cellar/php54/5.4.41/libexec/apache2/libphp5.so
エラー文そのまま掲載します。
実際に問題となっていたのは「Symbol not found: _ap_unixd_config」のようでした。
どうやら名称が変更になっていて場所がわからないらしい。
無い知恵を絞っても仕方ないので、先見者がいないかと検索し、以下のサイト様を見つけました。

blog.sims625.com

記事通りにreinstallするとあら不思議。正常に動作しました。
こういう系の問題はハマると本気で抜け出せなくなるので、本当に助かりました。
 
次にハマったのが「htdocs」の場所です。
接続確認できたので、phpファイルを作成して実際にアクセスしてみる段階になりました。
ここで.phpファイルを格納する「htdocs」の場所がわかりませんでした。
かなり探した結果、「usr/local/var/www/htdocs」にありました。
これは何かのバージョンアップの際に場所が変わったのか、単純にインストールの方法が間違っていたのか。
現状見当がつきません。
わかる方いらっしゃったら教えていただきたいです。
 
Gitに関しては、業務でSubversion使ってることもあり、さっくり内容理解し、導入できました。
公開するという点は若干の抵抗がありましたが、まだまだ練習の域なので何事も経験です(笑)
 
企画検討をするといいつつ、開発環境の整備で結構かかりました。
今回で開発環境はできたので、どんどん進めていきます。
...若干Unityとか触っといたほうがいい気もしているとっしゃんでした。。

【開発】全くの0からアプリを開発するまで【第1回】

みなさん、こんにちは。
とあるきっかけがありまして、アプリ制作を始めることにしました。
前々から興味はあったので、踏み切るためのきっかけがあったのは良かったです。
日常的な記事を書いてるほうは趣味全開なので、開発に関する記事はこちらのブログに分けることにしました。
 
日常的な記事はこちら。

comicbook.hatenablog.com

 
開発に先駆けてMac Book Proを購入しました。
中古で2013年10月発売のものを見つけ、金額的にもちょうど良い感じでした。
スペックは以下です。
 

f:id:comicbook:20150524201231j:plain

 
ちなみにMacの機種を購入したのは初めてです!
…なのに中古というツッコミはなしでお願いします。
 
Mac Book AirではなくProを購入した理由は以下の通り。
  • 開発したいアプリはゲーム
  • スペック的にAirよりもProの方が良さそう
実際、インターネット使ったり、動画観たりはWindowsの方でできるので、開発主体のPCということを考えてProを選択しました。
HDDよりもSSDの方が高速らしいということで、そちらも考慮してます。
確かに起動が段違いに速い気がします。
 
これから開発環境を整えるまでの過程を簡単に書かせていただきます。
 

クリーンインストール

中古ということもあり、友人の勧めでクリーンインストールすることにしました。
以下を参考にさせていただきました。

wayohoo.com

 
クリーンインストールは2時間ほどで完了。
合間はtorneで撮りためた『ご注文はうさぎですか?』を観賞しながら(ぇ
あー、癒されるのぅ。
 
完了したら、ダンディなボイスが流れ、ようこその画面が表示されました。
 

開発環境構築

クリーンインストールが完了し、FileVaultが完了するまで待機
合間はtorneで撮りためた(ry
 
はてさて、開発を行うために以下をインストールします。
全くの0ベースなので、友人の力を借りまくリングです。
 
早速「Xcode」のインストールを行います。
初心者なりにわかりやすいと感じ、参考にさせていただいたのは以下です。

www.appbank.net

 
インストールはWindowsなら各Webサイトで配布されているパッケージをダウンロードしてから行いますが、Macは違いました。
Windowsユーザーでもなじみ深い、AppStoreからインストールできました。
 
なにこれ、便利すぎ。
 
ちょっとサイズが大きいこともあり、時間がかかりました。
もちろん合間は(ry
 
次に「Homebrew」のインストールです。
※上記「Xcode」をインストールしていないとだめみたいです。(やってて良かった
こちらを参考にさせていただきました。

liginc.co.jp

 
必要なパッケージについては開発する内容が決まってから適宜インストールします。
…買ったばかりなので使わないものは極力インストールしたくないので。
 
ちなみにインストールは【ターミナル】で行う必要があります。
うむむ、Mac初心者で【ターミナル】がどこにあるのかすらわからぬ。
 それはこちらを参考にしました。

allabout.co.jp

  1. 画面下の【Finder】(顔みたいの)起動
  2. 画面上のリボンで【移動】→【コンピュータ】選択
  3. Macintosh HD > アプリケーション > ユーティリティ
  4. 【ターミナル】発見!(コンソールとかもあるのか…)
さて本題の「Homebrew」のインストールに移ります。
参考にさせていただいた記事の通り、ホームページからコマンドをコピペしてターミナルで実行。
 
なんだかよくわからずに実行したら以下の2か所で躓きました。
 
Press RETURN to continue or any other key toabort
→ ここは普通にEnterキーでOK
 
To proceed, enter your password, or type Ctrl-C to abort.
Password:
→ ここは現在ログイン中のユーザーパスワードを入力
 
Password:の際に入力したら「****」こんな感じで表示されると思ってました。
全然そんなことなくてあせりました。
表示がなくても入力はちゃんとされてるので打ち終わったらEnterキー。
 
おぉ、ちゃんとできたっぽい。
 
これにていったん完了。
 

・・・余談

Mac初めて買って驚いたのが、Ethernetポートがないこと。
有線LANを接続するために別売りの接続アダプタが必要なので、無線環境がない方は同時に購入しておくことをお勧めします。
Apple USB Ethernet アダプタ MC704ZM/A

Apple USB Ethernet アダプタ MC704ZM/A

 
 
これから合間をみて開発していきます。
次回は開発に向けて何を作るかの企画から始めます。