Home > アーカイブ > 2014-11

2014-11

Retina 5k iMac(Late 2014) が届いたので、環境構築メモ

  • 2014-11-28 (金)
  • mac
この記事の所要時間: 61

10 月末に発注した Retina 5k iMac(Late 2014)が、約一ヶ月待って、到着しました。

retina-5k-imac

早速、日頃の開発に使えるようにセットアップしましたので、そのメモです。

0. セットアップ

セットアップは、旧 iMac からの移行は行わず、クリーンインストールの状態から行っていきます。

1. OSX 環境設定

セキュリティとプライバシー

  • FileVault で暗号化
  • ファイアウォールを入にする

Dock

  • 画面上の位置を「左」に
  • 「Dock を自動的に隠す/表示」にチェック

Spotlight

  • 「21. Bing Web 検索」のチェックを外す

キーボード

「キーボード」タブ

  • 「キーのリピート」を右端(速い)に
  • 「リピート入力認識」までの時間を右端(短い)に
  • 「F1, F2 などのすべてのキーを標準のファンクションキーとして使用」にチェック

「修飾キー」をクリック

  • Caps Lock キーを「Control」に
  • Control キーを「Caps Lock」に

「ショートカットキー」タブ

  • 「フルキーボードアクセス」を「すべてのコントロール」に

「入力ソース」タブ

  • 日本語を追加
  • [日本語] 入力ソースは、ひらがなのみ
  • [日本語] 「Windows 風のキー操作」にチェック
  • [日本語] “/”キーで入力する文字を「/(スラッシュ)」に
  • [日本語] “¥”キーで入力する文字を「\(バックスラッシュ)」に
  • [日本語] 「数字を全角入力」のチェックを外す

トラックパッド

「ポイントとクリック」タブ

  • 「タップでクリック」にチェック
  • 「軌跡の速さ」を右端(速い)に

「その他のジェスチャ」タブ

  • 「アプリケーション Expose」にチェック

アクセシビリティ

「ズーム機能」

  • 「スクロールジェスチャと修飾キーを使ってズーム」にチェック。修飾キーは「Control」

「マウスとトラックパッド」

  • 「トラックパッドオプション」をクリック
  • [トラックパッドオプション] スクロールの速さを右端(速い)に

2. Homebrew インストール

アプリケーション類は、Homebrew / Homebrew cask で一気に入れたいので、まずは Homebrea 自体をインストールします。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

途中で、コマンドラインツールをインストールするかダイアログが出るので、インストールします。インストールが完了したら、brew コマンドが実行できるか確認しておきます。

$ brew -v
Homebrew 0.9.5

3. Homebrew / Homebrew cask でアプリケーションをインストール

Homebrew / Homebrew cask でアプリケーションを一括でインストールします。

以前は、brew bundle コマンドで、Brewfile に記述したアプリケーションを一括インストールする方法があったのですが、もうこのコマンドは存在しません。

ただ、Brewfile の各行の先頭に brew を追加すれば、単なるコマンドとして使えるので、シェルスクリプトにして、これを実行しました。(単に brew installbrew cask install を順に実行するだけ。)

今回利用したファイルは、以下のリポジトリに公開しています。

https://github.com/shin1x1/Brewfile

このリポジトリを展開して、Brewfile コマンドを実行します。

$ git clone https://github.com/shin1x1/Brewfile
$ cd Brewfile
$ ./Brewfile

あとは実行が終わるまで待つだけです。時折、インストールに root 権限が必要なパッケージがあるので、その際は順次パスワードを入力します。

4. Dropbox, Evernote の同期

Dropbox と Evernote を起動して、同期を行います。

とくに Dropbox の同期は時間がかかるので、早めに実行しておきます。

5. ライセンスの登録

有償ライセンスを購入しているアプリケーションがあるので、ライセンスキーを設定していきます。

  • PhpStorm
  • Dash
  • Bartender
  • iStat Menus

5. シェルの設定

設定ファイル類は、Dropbox にあるので、同期が完了したら、シンボリックリンクを張るスクリプトを実行します。

同期している設定ファイルは以下です。

  • .gitconfig
  • .gitignore_global
  • .vim
  • .vimrc
  • .zlogin
  • .zlogout
  • .zprezto
  • .zpreztorc
  • .zprofile
  • .zsh
  • .zshenv
  • .zshrc

また、「ユーザとグループ」を開いて、ログインユーザの「詳細オプション」(ユーザを右クリック)にある「ログインシェル」を /usr/local/bin/zsh (Homebrew でインストールした zsh)に変更します。   

6. アプリケーションの設定

アプリケーション群は必要に応じて設定していきます。

  • PhpStorm まずは、IdeaVim プラグイン。あとはその都度
  • iTerm フォントの変更と起動時ウィンドウサイズの変更
  • Chrome Google アカウントでログインすれば、同期されるので楽
  • Firefox 検索エンジンを DuckDuckGo に変更
  • Firefox about:config で、browser.newtab.urlabout:blank に変更

7. 秘密鍵の設定

あちらこちらに登録している公開鍵用の秘密鍵をインストールしておきます。もしくは新規の鍵ペアを作って、サーバやサービスに公開鍵を登録します。

さいごに

前回 も同じような作業を行いましたが、一番面倒なアプリケーション群のインストールが自動化できているので、楽ですね。

ソースコードは VCS リポジトリで管理して、開発環境は Vagrant、ドキュメント類もクラウド上や社内サーバにあるので、PC は、アプリケーションとその設定群があればセットアップは完了です。データ移行を考えなくてもいいので、良い時代になりましたね。

Retina iMac を1日触った感想としては、ブラウザやエディタなどのテキストがほんと綺麗です。あと、どのアプリケーションを使ってもキビキビ動いて快調です。(旧 iMac がじわじわと遅くなっていたので、余計にそう感じます。)ひとつ気になるのは、Mission Control や Expose でウィンドウを並べる時に、少しひっかかるというか、もっさりします。

レビューなどは、またしばらく使ってみた後に書いてみたいと思います。

  • コメント (Close): 0
  • トラックバック (Close): 0

Laravel 4 データベースを使ったテストで Migration と Seeder を使う

この記事の所要時間: 712

Laravel 4 でデータベースを使ったテストを書く際の Tips です。

laravel

自動テストでデータベースにアクセステストを書く際に大切なのが、データベーステーブルのデータをテストで想定された状態にしておくということです。テーブルの内容がテストを実行される度に異なると、ある時はテストが通って、ある時は通らないという状態になります。

この「想定された状態」をセットアップするために、フレームワークで用意されている Migration と Seeder を利用しています。

テストケースでマイグレーション実行

開発を進めていると、データベーススキーマを変更する場合があります。マイグレーションファイルを作成して、php artisan migrate コマンドで適用するのことになります。テスト用データベースについても適用する必要がありますが、php artisan migrate --env=testing を実行するのは、少し手間なので、テストケースで実行するようにしています。

artisan コマンドは、PHP コードでは、Artisan::call() で実行できるので、下記のようにすると、テストクラスでマイグレーションを実行することができます。

<?php

    public function setUp()
    {
        parent::setUp();

        Artisan::call('migrate');
    }

ただ、マイグレーションは、全てのテストケースで毎回実行する必要が無いので、基底クラスである TestCase に下記のように実装して、初回のみ実行するようにしています。

<?php
class TestCase extends IlluminateFoundationTestingTestCase
{
    protected static $databaseSetup = false;

    /**
     *
     */
    protected function setUpDatabase()
    {
        if (static::$databaseSetup) {
            return;
        }

        Artisan::call('migrate');

        static::$databaseSetup = true;
    }

    /**
     * Creates the application.
     *
     * @return SymfonyComponentHttpKernelHttpKernelInterface
     */
    public function createApplication()
    {
        $unitTesting = true;

        $testEnvironment = 'testing';

        return require __DIR__ . '/../../bootstrap/start.php';
    }
}

データベースを使うテストクラスでは、下記のように setupDatabase メソッドを実行して、マイグレーションを実行します。(実際にマイグレーションが実行されるのは初回のみ)

<?php
class FooTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();

        $this->setUpDatabase();
    }
}

フィクスチャとして Seeder を使う

Laravel には、テーブルのデータを一括登録する仕組みとして Seeder があります。テーブルへの登録処理を書いておくと、php artisan db:seed コマンドでデータを登録することができます。主にアプリケーションで必要なマスタデータや初期データを投入するのに使われますが、これをテスト時のフィクスチャとして利用します。

Seeder クラスは、app/database/seeder 以下に配置するのが通常なのですが、フレームワークとしては、オートローダーで読み込むことができれば、どこに配置しても構いません。

テスト用の Seeder クラスは、テストケースと密接な関係にあり、テストに応じたレコードを用意する必要があるので、同じ PHP ファイルに定義しています。クラス名は、テストケースクラス名の後ろに Seeder を付けています。こうすれば、どのテストケースでも、同じファイルにある Seeder クラスを __CLASS__ . 'Seeder'で参照できます。

<?php
class FooTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();

        $this->setUpDatabase();
        $this->seed(__CLASS__ . 'Seeder');
    }
}

class FooTestSeeder extends Seeder
{
    public function run()
    {
        Eloquent::unguard();

        Item::truncateAll();
        Item::create(
            [
                'id' => 1,
                'name' => '商品1',
                'price' => 100,
            ]
        );
    }
}

Item::truncateAll() は、PostgreSQL 環境で、truncate を実行するために独自に実装したメソッドで、下記のような実装になっています。TRUNCATE 文に RESTART IDENTITY CASCADE を付けることで、テーブルのシーケンス値のリセットと、このテーブルを外部参照しているテーブルを同時に削除することができます。

<?php
class AppModel extends Eloquent
{
    /**
     * for test
     */
    public static function truncateAll()
    {
        $table = (new static)->getTable();

        $sql = 'TRUNCATE ' . $table . ' RESTART IDENTITY CASCADE';
        DB::table($table)->getConnection()->statement($sql);
    }
}

複数のテストケースで共有する場合は、app/database/seeder に配置して、$this->seeder('TestCommonSeeder') などで実行します。

さいごに

冒頭に書きましたが、データベースを利用したテストでは、事前に想定した環境を作っておくことが肝になります。

Seeder をフィクスチャとして使うことで、アプリケーションの機能を使うことなく、テストに必要な状況を作り出すことができます。テストの中で、テスト対象以外のアプリケーションコードを実行すると、何をテストするためのものなのかが、ぶれてしまうので、環境構築はフレームワークやライブラリで用意された機能のみでシンプルに実現するのが良いでしょう。

  • コメント (Close): 0
  • トラックバック (Close): 0

Home > アーカイブ > 2014-11

検索
フィード
メタ情報

Return to page top