tanaka's Programming Memo

プログラミングについてのメモ。

Gulp+React+Babel(babelify)+watchify+BrowserSyncを使ったビルド設定

Reactの復習と、記憶を呼び戻すための自分用のメモです。uglifyやらmapファイルの作成もしてないごく簡単な動作確認用のものです。

利用するもの

  • Gulp
    • ビルドやデプロイなどを行うツール
  • React
    • クライアントサイドのビューを担当するエンジン
  • Babel
    • 策定中のJavaScriptの仕様を、現在のブラウザー上で動かせるようにするコンパイラ。ファイルの統合やReactの対応も行う
    • gulp-babelだとwatchifyとの連携方法などが不明だったので、babelify+browserifyを利用する
    • babelify, browserify, vinyl-source-stream が必要
    • es2015とReactに対応させるために、 babel-preset-es2015, babel-preset-react も必要
  • wathify
    • ファイルを監視して、変更のあったファイルのみをビルドするためのbrowserifyを拡張するもの
  • BrowserSync
  • その他
    • gulp-load-plugins
    • gulp-util
      • ログの出力など

事前準備

  • babel --version で、エラーが表示される場合は、 npm uninstall -g babel として古いものを削除しておく
  • GulpとBabelをグローバルにインストールしておく(gulp -vやbabel --versionでバージョンが表示されたらこの手続きは不要)
npm i -g gulp-cli babel-cli

必要なパッケージをインストールする

  • ターミナルで、開発するプロジェクトフォルダーに移動
  • 必要なパッケージをインストール
npm i --save-dev gulp babelify browserify babel-preset-es2015 babel-preset-react vinyl-source-stream watchify browser-sync gulp-load-plugins gulp-util

ビルド対象のプロジェクト

  • ここでは、Reactのチュートリアルのtutorial1.jsをビルドする
  • プロジェクトフォルダー内の構造を以下の通り、少し変更してある
    • tutorial1.jsは、プロジェクトフォルダー直下のsrcフォルダー内に配置
    • ビルド後のファイルは public/scripts/app.js に出力
  • public/index.htmlを以下のように修正
    • public/scripts/app.jsの読み込みを追加
    • ビルド後は普通のJavaScriptとして実行できるので、browser.min.jsの読み込みは削除して、 text/babel の表記を text/javascript に変更
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>React Tutorial</title>
    <!-- Not present in the tutorial. Just for basic styling. -->
    <link rel="stylesheet" href="css/base.css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/remarkable/1.6.2/remarkable.min.js"></script>
  </head>
  <body>
    <div id="content"></div>
    <script type="text/javascript" src='scripts/app.js'></script>
  </body>
</html>

gulpfile.jsを作成する

プロジェクトフォルダー直下に、 gulpfile.js を作成して、以下の内容にします。

var config = {
    srcFolder: 'src',
    srcFile: 'tutorial1.js',
    dstFolder: 'public/scripts',
    dstFile: 'app.js'
};

var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var watchify = require('watchify');
var source = require('vinyl-source-stream');
var browserSync = require('browser-sync').create();
var $ = require('gulp-load-plugins')();

var b = browserify({
    entries: config.srcFolder+'/'+config.srcFile,
    cache: {},
    packageCache: {},
    plugin: [watchify]
});
b.on('update', rebundle);
b.on('log', $.util.log);

function rebundle() {
    return b
        .transform(babelify, {presets: ['es2015', 'react']})
        .bundle()
        .on('error', $.util.log.bind($.util, 'Browserify Error'))
        .pipe( source( config.dstFile ))
        .pipe( gulp.dest( config.dstFolder ) )
        .on('end', function() {
            browserSync.reload();
        });
}

gulp.task('bundle', function() {
    return rebundle();
});

gulp.task('watch', ['bundle'], function() {
    browserSync.init({
        logPrefix: 'BrowserSync',
        server: ['public']
    });

    gulp.watch('public/*.html', ['bundle', browserSync.reload]);
});

Laravel5.2でバリデーション失敗時に入力値を残す

バリデーション失敗時に、入力値を残す

HTTP Requests - Laravel - The PHP Framework For Web Artisans の Old Input を利用します。入力値をセッションに記録(flush)するものです。

バリデーションの失敗時には、Laraveが自動的に記録してくれるので何もしなくても使えます。

Bladeテンプレートからは以下のように参照できます。

<input type="text" name="username" value="{{ old('username') }}">

コントローラーからは以下のように参照できます。

$request->old('username');

次の画面に入力値を受け渡す

バリデーション失敗時ではなく、次の画面で入力されたデータを確認のために表示したい場合などは、以下を呼び出せば同じくoldで参照できます。

$request->flash();

全てのデータではなく、指定のデータのみ引き継ぎたい場合や、除外したい場合は以下です。

// usernameとemailのみ、次に引き渡す
$request->flashOnly(['username', 'email']);

// passwordは渡さない
$request->flashExcept('password');


リダイレクトと同時に記録するには withInput() を呼びます。

// formに入力値全てを受け渡す
return redirect('form')->withInput();

// 入力値のうち、passwordだけ除外して、引き渡す
return redirect('form')->withInput($request->except('password'));

成功した時に、次の画面で値を消すには?

自動的に消えるので、特に何もする必要はありません。

エラーをBladeで判定

Laravel5.2では、以下で動きました。name属性についてのエラーがあるかを確認して、あれば bootstrapのhas-errorクラスを追加することで、該当するグループを赤く目立たせます。

<div class="form-group @if(!empty($errors->getBag('default')->first('name'))) has-error @endif">
:
</div>

macのEclipseのAntでパスを設定する

phpunitを実行しようとした時に、プリインストールされていた古いPHPを認識してしまってエラーになってしまいました。自分でインストールしたPHPを参照させるために、EclipseのAntに環境変数であるPATHを設定する方法です。

  1. EclipseのAntのOutlineから、適当なタスクを右クリック
  2. [Run As]>[External Tools Configurations...]を選択
  3. [Environment]タブを選択
  4. [New]を押す
  5. [Name]を「PATH」、Valueを「/usr/local/bin:/usr/bin」に設定して[Apply]

以上で、Antで利用するPATHを自分で設定できました。

PHPで簡単にPOSTする

PHPUnitのテストなどで、手っ取り早くPOSTする時の関数。PHPの公式ページのサンプルなどを参考にしました。

PHP: file_get_contents - Manual

<?

/**
 * @param string $url 送信先のURL
 * @param array $sendarray 送信する連想配列
 *
 * @return array response=戻ってきたページの情報 / http_response_header=レスポンスヘッダ
 */
function postUrl($url, $sendarray)
{
    $data_url = http_build_query($sendarray);
    $data_len = strlen($data_url);

    $res = file_get_contents(
        $url,
        false,
        stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: $data_len\r\n",
                'content' => $data_url,
            ),
        ))
    );

    return array(
        'response' => $res,
        'http_response_header' => $http_response_header,
    );
}


// 利用サンプル
// 送信先に、$_POST['data1']に'test1'、$_POST['data2']に'test2'を渡す
// 戻り値のレスポンスヘッダーの1行目と本文を表示
$send = array(
    'data1'=>'test1',
    'data2'=>'test2'
);
$res = postUrl("http://www.example.com", $send);
echo "code = ".$res['http_response_header'][0]."\n";
echo "resp = ".$res['response']."\n";

Unity5.3.4でAndroidアプリのビルド

SH-08Eでデバッグする時の手順をまとめておきます。SH-08EのAndroidバージョンは4.2.2です。SH-08E以外の端末では、ドライバーの部分を、所有の[ADB Driver]で検索して、インストールすれば同様に動くと思います。

Android Studioの準備

SH-08Eの準備

  • 設定>本体設定を開く
  • 端末情報を開く
  • ビルド番号の欄を7回タップする
  • 設定画面に開発者向けオプションが表示されるので、タップ
  • USBデバッグをONにして、スリープモードにしないもチェック

他のAndroid端末もほぼ同様です。違う場合は、マニュアルやインターネットで開発者向けオプションの設定方法を確認してください。

SH-08E用のドライバーインストール

  • SH-08E ドライバー で検索して、メーカーのドライバーページを開く
  • 共通ドライバーをダウンロードして、ドキュメントフォルダー内などに解凍しておく
  • ドライバ|開発者向け情報|AQUOS:シャープに従う
  • 端末をUSBでPCに接続
  • ドライバーのインストールが始まらない場合は、デバイスマネージャーを開く
  • Android ADB Interfaceを開く
  • ドライバーの更新を押す
  • 「コンピューターを参照してドライバーソフトウェアを検索します」を選択
  • 参照を押して、先ほど解凍したフォルダーを設定して[次へ]>[インストール]

他の端末の場合は、その端末用のADBドライバーを探して、インストールしてください。

Unity

  • [File]>[Build Settings]メニューを開く
  • 実行に必要なシーンをビルドに加える
  • [Platform]を[Android]に変更して[Switch Platform]
  • [Player Settings...]を押す
  • [Other settings]欄を開く
  • [Bundle Identifier]欄を、jp.自分の名前.アプリ名などにする(例 jp.dat.androidtest)
  • [Minimum API Level]をテストしたい端末に合わせる。SH-08Eの場合はAndroid 4.2

ビルド

  • Unityの[File]>[Build Settings]ウィンドウの[Build And Run]を押す
  • アプリ名を入力
  • ビルドの途中で、端末に警告が表示されるので、チェックを入れて許可する

以上で実行完了。

SDKがないというエラーが発生したら・・・

Android Studioをインストールしたのとは別のアカウントからだと、改めてAndroid Studioの設定をしないと、ビルドに失敗します。以下の手順で、設定してください。

  • Windowsのスタートメニューから[Android Studio]>[Android Studio]を起動
  • ウィンドウが起動したら、そのまま[OK]を押して、しばらく待つ
  • [Next]>[Next]と選択
  • インストール先のパスに日本語が含まれていたらインストールできないので、その場合は以下に変更する
    • Android SDK Locationの右にある[...]をクリック
    • 左から5番目ぐらいにある[New Folder]ボタンを押す
    • Android\Sdk」と入力して[OK]を押す
    • テキストボックスに「C:\Android\Sdk」 と入力して、[OK]を押す
  • [Next]>[Finish]を押して、インストールが完了するのを待つ
  • [Finish]でインストールを完了させる
  • [Configure]>[Settings]を開く
  • [Appearance & Behavior]>[System Settings]>[Android SDK]を選択
  • 右の[SDK Platforms]タブを選択して、[Android 6.X(N)]にチェックを入れる
  • タブを[SDK Tools]に切り替えて、[Google USB Driver]にチェックを入れる
  • [Apply]ボタンを押して、[OK]を押す
  • [Accept]を選択して、[Next]を押す
  • インストールが完了するまで待つ
  • [Finish]を押して完了

以上ができたら、以下を開いて「UnityとAndroid SDKの設定」の4.以降を設定したら完了です。

インストール手順2016

Unity5最新版

  1. http://unity3d.com/jp/5 に接続
  2. [Unity 5 を入手]を押す
  3. Personal Editionの[無料ダウンロード]
  4. インストーラーをダウンロードしてインストール開始
  5. [I accept the terms of the License Agreement]にチェックを入れて[Next]
  6. 以下の項目にチェックを入れて、それ以外は外して、[Next]

- Unity 5.3.4f1
- Web Player
- Standard Assets
- Windows Build Support
- Android Build Support
- WebGL Build Support

  1. [Next]でインストール開始
  2. インストールが終わったら、Unityは起動せずに閉じてよい(Unityが起動したら、閉じてよい)
  • Unity5.3から、Unityに同梱のコードエディタで日本語が使えるようになったため、Visual Studioとの連携は不要

GitHub Desktop

GitHubを操作するためのツール

  1. GitHub Desktop - Simple collaboration from your desktopに接続
  2. [Download GitHub Desktop]を押して、インストーラーをダウンロード
  3. インストーラーを起動して、指示に従ってインストールを完了させる
  4. [Skip Setup]を押して、起動が終わったら完了

Atomエディター

HTMLやJavaScriptPHPなど、Webコーディングに適したテキストエディタ。個人作品を紹介するWebページを作成するために利用する。

  1. Atomに接続
  2. [Download Windows Installer]を押して、[名前をつけて保存](保存の横の▼を押して選ぶ)
  3. ファイル名の最後に「.exe」を追加して保存
  4. ダウンロードが完了したら、[ファイルを開く]を選択して起動して、指示に従ってインストールを完了させる
  5. インストールが完了したら、Atomを起動
  6. [File]>[Settings]メニューを選択
  7. [+Install]を押す
  8. [Search packages]欄に[emmet]と入力して[Enter]キーを押す
  9. [emmet]が表示されたら[Install]を押してインストール
  10. インストールが完了したら、[Search packages]欄を[preview html]に変更して[Enter]キーを押す
  11. [atom-html-preview]が表示されたら[Install]を押してインストール
  12. [Search packages]欄に[linter html]と入力して[Enter]キーを押す
  13. [linter-htmlhint]が表示されたら[Install]を押してインストール

以上が完了したらAtomを閉じる。

Firefox

IEは癖が強いのでFirefoxもインストールしておく。

  1. Firefox のダウンロード — 自由な Web ブラウザ — Mozilla
  2. 指示に従ってインストール
  3. Firefoxのインストールが完了したら、起動
  4. 右上の[三]ボタンを押す
  5. [アドオン]をクリック
  6. 右上の検索ボックスに[firebug]と入力して[Enter]キー
  7. [Firebug]をインストール

以上が完了したら、Firefoxを閉じる。

WinMerge

コードの違いを確認するためのツール

  1. WinMerge 日本語版
  2. 64bit版をダウンロードする
  3. ダウンロードしたインストーラーを起動して、指示に従ってインストールを完了させる

Android SDK

UnityでAndroidの開発をするためにインストールしておく。

JDKのインストール

  1. Java SE - Downloads | Oracle Technology Network | Oracleを開く
  2. [JDK]の下の[Download]を押す
  3. [Accept License Agreement]にチェック
  4. [Windows x64]の横の[jdk-8u??-windows-x64.exe]をクリック
  5. [実行]を押す
  6. デフォルトのまま[次へ]などで完了させる
  7. [閉じる]ボタンが表示されたら押して終える(次のステップへはやらなくてよい)

JDKの設定

  1. [スタート]メニューから[コンピューター]を開く
  2. ローカルディスクCを開く
  3. [Program Files]>[Java]フォルダーを開いて、[jdk1.8.?_??]となっているフォルダーのパスを確認
  4. [スタート]メニューを押して、[コンピューター]を右クリックして[プロパティ]を押す
  5. [システムの詳細設定]を押す
  6. [環境変数]を押す
  7. [システム環境変数]欄から[JAVA_HOME]を探す
    1. 見つかったら[JAVA_HOME]をダブルクリックして、変数値の欄に、3.で確認した[jdk1.?.?_??]へのパスを書き写して[OK](例 C:\Program Files\Java\jdk1.8.0_25)
    2. 見つからなかったら、[新規]ボタンを押して、[変数名]に JAVA_HOME 、[変数名]に上記で確認した C:\Program Files\Java\jdk1.8.0_25 のようにパスを入力して[OK]を押す
  8. [OK]を押して設定を閉じる

Android SDKのインストール

  1. Download Android Studio and SDK Tools | Android Studioに接続
  2. [DOWNLOAD ANDROID STUDIO]を押す
  3. 画面下の[I have read and agree with the above terms and conditions]にチェックを入れる
  4. [DOWNLOAD ANDROID STUDIO FOR WINDOWS]を押してインストーラーをダウンロード
  5. ダウンロードが完了したら、インストーラーを起動する
  6. 「このファイルを実行しますか?」が表示されたら[実行]を押す
  7. 選択肢が表示されるまで数分かかることがあるので、Setup画面が表示されるまで待つ
  8. 「Welcome to ・・・」という画面が表示されたら、[Next]を押す
  9. 「Choose Components]はそのまま[Next]を押す
  10. [I Agree]ボタンを押して進める
  11. そのままの設定で[Next]を押していき、[Install]ボタンが表示されたら押す
  12. インストールが完了するまで待つ
  13. 「Failed to install Intel XAXM.・・・」というエラーが表示される場合があるが、[OK]で進めてよい
  14. インストールが完了したら[Finish]を押す
  15. Android SDKが起動するのを待つ。メッセージが表示されたら、そのまま次に進める
  16. 必要なコンポーネントのダウンロードとインストールが始まるので、完了するまで待つ
  17. [Finish]が表示されたら押す

UnityとAndroid SDKの設定

  1. [スタート]メニューからAndroid Studioを起動
  2. [Configure]>[Settings]を選択
  3. ウィンドウの左から、[Appearance & Behavior]>[System Settings]>[Android SDK]を選択
  4. [Android SDK Location:]の右のファイルパスを選択してコピー(例 C:\Users\XXXX\AppData\Local\Android\sdk]
  5. [OK]を押して、Android Studioを閉じる
  6. Unityを起動
  7. [NEW]を選択して、[Project name]に[android-test]と入力して[Create project]を押す
  8. [Edit]>[Preferences...]メニューを選択
  9. [External Tools]を選択
  10. [Android SDK]の右の欄に、4でコピーしたパスを貼り付ける
  11. ウィンドウを閉じる
  12. Unityを閉じる

以上。

Atomのatom-beautifyで_analyticsUserIdのエラーが表示された場合

Atom-Beautifyを実行した時に以下のようなエラーが表示されました。

You have unsupported options: _analyticsUserId
Please run Atom command 'Atom-Beautify: Migrate Settings'.

以下で解消できました。

手順

  • Atomを起動
  • [command]+[shift]+[p] キーを押して、Atomコマンドを開く
  • atom-beautify」と入力して、表示されるメニューから[Atom Beautify: Migrate Settings]を選択


以上で、Atom Beautifyの設定ファイルが修正されて、警告が表示されなくなります。