2015-01-01から1年間の記事一覧

segment.ioをまじめに導入してみてわかったこと

Segment - We make customer data simple.segment.com シリコンバレーベンチャーな、アプリに関わるASPサービスを一括で入れられるよ!というサービス。 前はドメイン名そのままでsegment.ioって名前だったんだけど、今はsegment.comになっている。 iOSアプ…

Rails: herokuでstagingからproductionにデータコピーする方法

herokuは起動に30秒かかってもOKならdyno=1で無料なので、staging環境が気軽に作れる。 Heroku で既存の本番環境をコピーしてステージング環境を作る - Qiitaqiita.com stagingで確認したデータをそのままproductionに移したい。 こんなかんじでできる。 def…

IAMのユーザでawsコンソールにログインする方法

iam user aws console とか iam user login to aws console で検索すると古い記事が出てくるんだけど、IAM userのサインインURLを指定されたとおりにつくったらnot foundになる。 →userつくって、それをgroupに所属させたら、IAMのトップページにサインインU…

herokuのdbをローカルにインポートする方法

herokupostgresのバックアップのダウンロードが管理画面からできるようになってた。 pgbackupsアドオンがアドオンじゃなくなって、herokupostgresの標準バックアップツールになったタイミングで変わったみたい。 前はコマンドラインからしかできなかったはず…

Rubyにとってのメソッド引数のタイプチェックとは

JavaとかObjective-Cとか静的な言語ではメソッドの引数やクラスのインスタンス変数などは予め型を指定しておく必要があって、その型に合わない引数が渡されると、コンパイル時にエラーになることによって、そのメソッド内では安心して引数にその型にしかわか…

Dependency Injectionが良い理由

Dependency Injection(DI)というオブジェクト指向言語のコーディングテクニックがある。 あるクラスAの中で他のクラスBのインスタンスを生成するのをやめて、メソッドの引数とか、Aの初期化時に引数としてインスタンスを渡そうというテクニック。 良いところ…

エンジニアの判断責任

エンジニアの特性としてなのか、僕個人の特性なのか不明だけど、非技術者から技術的内容を質問されると、できるだけ嘘のないように、正確に答えようとする意識が働く。 アプリの作り方が二通りあって、作業のコストとか作りのきれいさを考えると現実的に作り…

フレームワークの強制力

iOSやAndroidなどのモバイルアプリフレームワークのいいところの一つは、ずぶの素人が作っても、フレームワークレベルでの強制力が働くため、そこそこきれいなコードになること。 例えばiOSであればStoryboardというGUIでViewを書いていける機能があって、こ…

YAGNI:すぐに使わんもの作るなの理由

YAGNI - Wikipedia まさに言いたいこと全部wikipediaに書いてある。 「あとで使うだろうとの予測の元に作ったものは、実際には10%程度しか使われない。」 とあるけれど、新規事業つくるスタートアップの観点で言うと、仮にこの実際に使う10%に入ったとしても…

掘ってもなにも出てこなさそうなところ:iOS画面遷移の分岐

iOSで、ある画面から条件によって(ユーザの種類とか)別の画面に遷移させたくて、きれいに書ける方法ないかと思って考えたり探したりしてもなかなかいい方法ない。 そもそもsegueでやる方法の何が不満かというと、条件分岐で別画面に遷移させた場合って、遷移…

アンチパターンの良さ:パターンの再発明は難しい

今日作ったコードの、今日作った設計の、良い所を一般化してまとめておこうとするとすごく難しい。 それがほんとにベストの書き方だったかを検討するのって、他の可能性をできるだけ多く検討する必要があるので、自分より上級のプログラマと時間をとってペア…

受託開発と自社サービス開発の、システム開発の思想の違い

受託開発の場合、XXXという仕様のものを作るとXXX円払いますよという仕事なので、プロセスとしてまず「どういうものを作るか」という仕様を決める必要がある。 この仕様はできるだけ詳細に詰めておく方がよくて、(なぜなら後々曖昧な仕様に漬け込まれて作業…

アプリのweb APIをRailsで作った時のアンチパターン

①エラーメッセージしっかり作りこまなくても意外と大丈夫 HTTPエラーコードはRailsが勝手に吐いてくれるので(Not FoundとかUnauthorizedとか)、小さいチームでサーバもアプリも作る場合は意外と大丈夫。 ②配列の書き方統一する has_manyのデータの列挙の書き…

エンジニアのやる気を削ぐアンチパターン

エンジニアあるある。 ①つくったもの使わない 説明不要で、空振り感、虚しさ感がすごい。フィードバックからブラッシュアップという流れを経ることができないので、使った技術のメリット・デメリットを腹落ちして理解できないという面も☓ ②根拠の無い「決め…

スタートアップ社長のアンチパターン:人の話聞けない

小さい会社で社長と超接近戦でプログラマーやってたんで、感じたアンチパターンまとめ。 実際には社長に限らずとも仕事のパートナーに(特にプログラマーに)心地よく思ってもらうためのパターンであると思うので、応用が効くはず。 社長は非技術者である前提…

iOS画面遷移のアンチパターン2:条件分岐×条件分岐にならないようにする

ちょっと抽象的なんだけど、タブを3つ持ったアプリがあるとして、3つのタブで条件分岐がある画面遷移(4から7)を共有している場合を考えると、5,6,7に到達できるのは1,2,3すべてなので、パターンが掛け算になって増えてしまう。ので良くない。 例えば各タブか…

iOS画面遷移のアンチパターン:複数画面一気に戻る場合はmodal遷移使わない

UINavigationController使って、pushで進んでいくべき。 いや、UINavigationControllerてそのためにあるんだから当たり前じゃんと言われそうだけど、ところがどっこい遷移アニメーションがmodalの方がいいときとかはそっち使ってしまうことがよくある。だが…

最初はアプリの標準をカスタムしないほうがいい理由

カスタムクラスを作るってことは、実装だけじゃなく、以下のような手間(=コスト)がかかる ①設計する手間 ②テストする手間 ③実装したものをドキュメントする手間 ④バグ修正する手間 ①は、カスタムをする場合は標準のものを理解した上で、できるだけ運用コ…

Web的な感覚でアプリを作ると困る理由

静的なWebページのイメージでアプリを作ると非常に作りにくいパターンがある。 ①topページへもどるとか、特定の画面まで一気に戻るというのがつくりづらい 無理やりつくろうとすればつくれるけど、Webの感覚でハイパーリンクさせるだけでしょというのは違っ…

ホントはよくわからないMVC

RailsとかiOS SDKとか使ってるとデフォルトでMVCの親クラスがあって、下々の者はそれをありがたく継承してカスタムしなさいという風になっていて(実際下々なのですごくありがたい)、普段意識することがないんだけど、よくよく考えるとMVCのメリットって何…

リーンスタートアップ:なぜ作る前にコンセプトを実証するのが良いか

リーンスタートアップでは出来るだけ実装せず、必要最小限のものでコンセプトを実証するのが良いとされる。 スタートアップのシステム開発の場面で考えるとすごく賛成で、これは見事に逆をやってしまった失敗経験に裏打ちされている。 具体的には内部で仕様…

Rubyのインスタンスにとっては見るものすべてduck

duckタイピングってrubyさわったことあるひとにはなんだかかっこよくて、いつかはduckタイピングしたいよね、なんて僕も思ってたわけなんですが、よくよく考えるとrubyって型チェックなしなんで、あるインスタンスにしてみたら、受け取るメッセージってイン…

今日日アプリの開発ではデザイン(見た目)のカスタムには根拠を持つべきだ

一般的に、アプリを知らない人がゼロからアプリを作ると、まずデザイナーを雇って見た目をデザインして、画面遷移を決めて、プログラマーに渡し、実装するという流れが多いのかなと思う。 きっとこれって古き良きホームページデザインの流れを模したもので、…

エンジニアのぼやき

「リファクタリング」とか「ユーザーストーリー」とかで検索すると、アジャイル開発の偉い先生達(多分アメリカの?)が書いたと思われる、こういう場合には見積はユーザーストーリーで、ユースケースで、とかベストプラクティス的なのがよく出てくるんだけ…

ソースコードリファクタリングのストラテジー

リファクタリングするときって、僕みたいな低レベルプログラマーにはよくあることだが、いろいろ考えた挙句、時間だけ立ってあまり改善されないということがよくある。 自分への戒めのために、何を検討しているのかよくわからないまま時間をムダにしないため…

スタートアップにおける開発のアンチパターン:仕様ガッチガチに決める

受託開発を仕様書ベースで外部に発注する場合は、一番最初に仕様をガッチガチに決めて発注することが多い。これは発注側から見ると、必要な要件を満たしているものを作るためで、受ける側から見ると、あとからあれもこれもにならないためである。 翻って内部…

ウォーターフォール型開発が近年の新規事業開発にあってないと思う理由

・ウォーターフォール型がフレームワークベースの開発に合っていない ①ウォーターフォール型は大規模開発には向いてる(仕様を前もって決めておけば全体が都度協調しなくてもOKなので)んだが、フレームワークの恩恵のおかげで少人数チームでもアプリケーショ…

マーケット・イン、プロダクト・アウト、フレームワーク・アウト

マーケット・イン、プロダクト・アウトと対立する概念では全くないんだけど、アプリケーションを開発する場合にマーケット・インの場合でもプロダクト・アウトの場合でも、フレームワークに沿ってつくることを意識する必要がある。とくに小さなスタートアッ…

ミスったこと分析:社長のコミュニケーション編

ミーティングの席で、昔ながらの開発方法を信望する社長と、アジャイル、リーンスタートアップ的な開発方法の知識の断片が頭に入っている僕の対立が始まる 「必要な機能は私の頭に入っていて、それを伝えておおよその画面遷移と画面のデザインはデザイナーに…

ミスったこと分析:僕のコミュニケーション編

反省点として、こちらのコミュニケーションの方法が悪かったという面があると思う。 あまりプラス思考な話に聞こえなかったと想像される。 つい最近も同じような議論を社長として、その時横で聞いていた同僚に指摘された。 僕側のロジック: 開発にかけられ…