ackintosh

勉強したことなどをメモしています。

HerokuにRailsをデプロイする

HerokuはPostgresqlなのでインストール

Gemfile
group :production do
gem 'pg'
end

# bundle install
# git add .
# git commit -m "message"
# git push heroku master

git 基礎

gitのバージョン管理

1. 作業ディレクトリ

2. ステージングエリア

3. リポジトリ

コマンド

バージョン確認

git version

設定

・確認
git config -l

・名前
git config --global user.name "ackintosh"
・メールアドレス
git config --global user.email "mail@addr.com"

コミット

リポジトリ作成
git init

・共有リポジトリ作成
git init --bare

・ステージングエリアにファイル追加
git add index.html
リポジトリにコミット
git commit
リポジトリのログを表示
git log

Ruby基礎

Ruby始めました。
Hello, Ruby !!

クラス

・クラス名は必ず大文字で始める
・オブジェクトの外部からインスタンス変数に直でアクセスすることはできない
カプセル化が強制されている
→外部アクセスが必要なものだけattr_accessor等を定義する

class Hoge
  # コンストラクタ
  def initialize(args = "hoge")
    # インスタンス変数にセット
    @var = args
  end

  # インスタンスメソッド定義
  def hello
    print "Hello, ", @var, " ! \n"
  end

  =begin
  アクセサメソッド定義
  =end
  # setter 2種類の書き方
  attr_reader :var, :var2 # 複数はカンマ区切り
  def var
    return @var
  end

  # getter 2種類の書き方
  attr_writer :var
  def var=(value)
    @var = value
  end

  # setter と getter を同時に定義
  attr_accessor :var
  
  # クラスメソッド
  # def クラス名.メソッド名 〜 end
  # def self.メソッド名 〜 end
  def Hoge.hello(name)  # def self.hello(name)
    print name, " said hello. \n"
  end
end

・アクセス修飾子
public (デフォルト)
private
protected

class AccTest
  def pub
    puts "pub is a public method."
  end
  public :pub  # pubメソッドをpublicに設定

  def priv
    puts "priv is a private method."
  end
  private :priv  # privメソッドをprivateに設定
end

・複数のメソッドのアクセス修飾子をまとめて設定する

class AccTest
  public # これ以降に定義したメソッドはpublicになる
  def pub
    puts "pub is a public method. "
  end

  private # これ以降に定義したメソッドはprivateになる
  def priv
    puts "priv is a private method. "
  end
end

・継承

class クラス名 < スーパークラスend

変数

・英数、アンダースコア
・数字からは始められない
・変数の種類4つ
グローバル変数

$variable

ローカル変数

variable

インスタンス変数

@variable

クラス変数

@@variable

定数

・大文字から始まる

Hoge
HOGE

コメント

・1行コメント

#

・複数行コメント

=begin
コメント
コメント
=end

EC-CUBEでTDD

EC-CUBE開発コミッターのnanasess様が神のようなスライドを公開されていました。

EC-CUBE + PHPUnit で 実践テスト駆動開発

<PHPUnit>テスト入門

「テストを書く」という感覚がイマイチ分からない現状に危機感を抱き始めたので、
テストについて勉強していきたいと思います。

・プロダクトコード以上に見やすく
・サンプルコードの役割も果たす
プログラマーの精神安定剤
・変更の恐怖を開放して自信をつける

テスティングフレームワーク

xUnit

xUnitとは、コンピュータプログラムの単体テストユニットテスト)を行うためのテスティングフレームワークの総称である。
これらのフレームワークでは、関数やクラスなど、ソフトウェアの様々な要素(ユニット)をテストすることができる。
xUnitフレームワークの主な利点は、テストを自動化できること、同じテストを何度も書かずに済むこと、個々のテストの結果がどうあるべきかを覚えておかなくても良いことである。

wikipediaより。
Java: JUnit
Ruby: RubyUnit
Python: PyUnit
JavaScript: JsUnit
PHP: PHPUnit

普段から親しんでいるPHPで始めます。

PHPUnitの基本。

・assertEquals() などの関数で、予想される結果と実際の結果を確認する
 →assertEquals('hoge', 'hoge'); →テスト成功
 →assertEquals('hoge', 'boke'); →テスト失敗
・setUp() は必ず各テストメソッドの実行前に実行される
 →データの準備やトランザクションの開始
・tearDown() は必ず各テストメソッドの実行後に実行される
 →後処理やトランザクションロールバック

リーンスタートアップ

リーンスタートアップとは、成功するサービスを作り上げるためのプロセスをまとめた手法。
Lean = 無駄のない、引き締まった

  • 考え方
  • プロセス
  • 仮説の設定( 価値仮説、成長仮説 )
  • 仮説の検証( BMLループ )
  • ピボット
  • まとめ

考え方

失敗することを前提に、
「ユーザーに実際に利用してもらいながら、失敗からいかに早く無駄なく成功にたどり着くか」

プロセス

1. 仮説の設定
2. 仮説の検証
3. ピボット(方向転換)

仮説の設定

・価値仮説
「なぜプロダクトに価値があるのか?」

ユーザー ___ は
欲求 ___ (し)たいが、
課題 ___ (ない)ので、
製品の特徴 ___ (こと)に価値がある


・成長仮説
「なぜプロダクトのユーザーが増えるのか」

ユーザー ___ は
きっかけ ___ することで、
需要の発生 ___ するようになる

・成長エンジン
1. ペイドエンジン( Paid Engine )
2. バイラルエンジン( Viral Engine )
3. スティッキーエンジン( Sticky Engine )

ゼロからサービスを立ち上げる場合だけでなく、サービスを構成する単一の機能に対しても適用できる。
生み出そうとしているものが継続的に価値を提供できるものかどうか。
どのような仮説が検証されれば、この問いの答えになるのかを明確にする。

仮説の検証

・BMLループ
1. 構築( Build )
2. 測定( Measure )
3. 学習( Lean )

・構築
仮説に関するユーザーのフィードバックを得られる最小限のプロダクトを用意する。
→MVP( Minimum Viable Product )
最小限の労力と時間でできるものにする。
→動くアプリケーションである必要もない。

・測定
コホート分析と呼ばれる手法が推奨される。
コホート = ユーザーグループ
複数のユーザーグループにプロダクトの出し分けを行うことで比較評価する。


・検証に基づく学習
予想に対して上回ったのか下回ったのかには関わらず、「なぜその結果が導かれたのか」について検討する。

リーンスタートアップでは、学びを得ることこそが「スタートアップにおける成果」とされる。
「1つの仮説を最小の時間で検証するにはどうすればよいか?」に、すべての知恵と工夫を投入することが、検証フェーズの鍵。

ピボット

ピボット = 「プロダクト・事業・戦略に関して重要な仮説が新たに生まれた際の明確な方向転換」

ピボットのカタログ
→現在のプロダクトの問題発見にも有効
・ズームインピボット

・ズームアウトピボット

・カスタマーセグメント/ニーズピボット

・プラットフォームピボット

・ビジネスアーキテクチャピボット

・バリューキャプチャピボット

・成長エンジンピボット

・チャネルピボット

・テクノロジピボット

ピボットするべきタイミング
「成長が止まった、または成長が鈍化したとき」

まとめ

<PHP> クロージャ

クロージャはPHP5.3から使えるようになった。

クロージャとは、関数内部に関数が定義されたとき、内部の関数が外部の関数の変数に
アクセスできる仕組みのこと。

無名関数を定義する際に、use キーワードで使う変数を宣言する。

<?php

function something($a)
{

// useキーワードを使う
$less_than_a = function($b) use ($a)
{
return $a > $b;
};

// 無名関数呼び出し
if ( $less_than_a($b) ) .... ;

}

?>