<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tutorial &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/tutorial/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 31 Oct 2012 00:30:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>JavaScriptのテストツール「testem」が素晴らしいぞ</title>
		<link>https://blog.mach3.jp/2012/10/31/js-testem-script.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 31 Oct 2012 00:30:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testem]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2757</guid>

					<description><![CDATA[JavaScriptユニットテスト一年生の私が、Nettuts+ のチュートリアルで知ったテストツール 「testem」のお陰で大変捗ったので是非お勧めしたく、ここで紹介してみます。 testem ってなに testem [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>JavaScriptユニットテスト一年生の私が、<a href="http://net.tutsplus.com/tutorials/javascript-ajax/make-javascript-testing-fun-with-testem/">Nettuts+ のチュートリアル</a>で知ったテストツール 「<a href="https://lh6.googleusercontent.com/-PfCvl0NLxAk/UJALoNXxsFI/AAAAAAAABo8/nUGSw2u6OTc/s400/20121031-00.png">testem</a>」のお陰で大変捗ったので是非お勧めしたく、ここで紹介してみます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-PfCvl0NLxAk/UJALoNXxsFI/AAAAAAAABo8/nUGSw2u6OTc/s400/20121031-00.png" alt=""/></figure>



<p></p>



<span id="more-2757"></span>



<h2 class="wp-block-heading">testem ってなに</h2>



<h3 class="wp-block-heading">testem</h3>



<ul class="wp-block-list">
<li><a href="https://github.com/airportyh/testem">testem via GitHub : airportyh/testem</a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Unit testing in Javascript can be tedious and painful, but Testem makes it so easy that you will actually want to write tests.</p>
</blockquote>



<p>要するに、面倒なJSのユニットテストをより快適にしてみんなでハッピーにテスト書こうよ！というツールです。 testem自体は<em>node.js</em>ベースで動作し、<em>Jasmine/QUnit/Mocha</em>に対応しています。（デフォルトはJasmine）</p>



<p>test&#8217;em は<em>&#8220;Test them&#8221;</em>の省略形でしょう。 どんなテストもまとめて引き受けますよ！という事だと思います。</p>



<h3 class="wp-block-heading">具体的になにしてくれるの</h3>



<p>例えばJasmineで<em>「基礎的で面倒なテストの開始の仕方」</em>をした場合、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>Jasmineのコードをとってきて設置し、</li>



<li>SpecRunner.html を編集し、</li>



<li>ブラウザでそのHTMLを開き、</li>



<li>テストを書いてブラウザをリフレッシュする</li>
</ol>
</blockquote>



<p>と、こんな感じの作業をプロジェクトの度に繰り返す事になります。</p>



<p>これが、testemでは</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>設定ファイルを書く</li>



<li>testem コマンドを叩く</li>
</ol>
</blockquote>



<p>だけでテストが始まります。</p>



<h2 class="wp-block-heading">インストール</h2>



<p>もしnode.jsが既にインストールされている環境ならば、<em>npm</em>コマンドだけで簡単に導入できます。 （node.jsがまだ入っていないのであれば、まずそちらを先に<a href="http://nodejs.org/">インストール</a>しましょう）</p>


<pre class="wp-block-code"><span><code class="hljs">$ npm install -g testem
</code></span></pre>


<p>正常にインストールできませんでしたか？ 環境によっては<em>sudo</em>が必要になるかもしれません。</p>


<pre class="wp-block-code"><span><code class="hljs">$ sudo npm install -g testem
</code></span></pre>


<p>これでtestemコマンドが使えるようになったはずです。 ヘルプでも覗いてみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs">$ testem -h
</code></span></pre>


<h2 class="wp-block-heading">テストをしてみよう</h2>



<p>早速テストをしてみようと思います。仮に、次のようなディレクトリ構造にしてみましょう。 scripts/<em>.js がテスト対象のライブラリ、tests/</em>.js がテストです。 testem.json が設定ファイルになります。</p>


<pre class="wp-block-code"><span><code class="hljs">./
├ scripts/
│   └ foobar.js
├ tests/
│   └ test-foobar.js
└ testem.json （設定ファイル）
</code></span></pre>


<h3 class="wp-block-heading">設定ファイルを書く</h3>



<p>設定ファイルはJSONで記述します。必要最低限の設定は、こんな感じになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-json">{
    <span class="hljs-attr">"framework"</span> : <span class="hljs-string">"jasmine"</span>,
    <span class="hljs-attr">"src_files"</span> : &#91;
        <span class="hljs-string">"scripts/foobar.js"</span>,
        <span class="hljs-string">"tests/test-foobar.js"</span>
    ]
}
</code></span></pre>


<ul class="wp-block-list">
<li><br /><p><em>framework</em><br /><br />使いたいテストフレームワークを書きます。デフォルトはJasmineなので、Jasmineを使う場合は省略できます。</p><br /></li>



<li><br /><p><em>src_files</em><br /><br />読み込むソースファイルを配列で記述しておきます。</p><br /></li>
</ul>



<h3 class="wp-block-heading">テストを開始する</h3>



<p><em>testem</em>コマンドを叩けばテストは開始されます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ testem
</code></span></pre>


<p>実行すると次のような画面が表示されます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-TZqBngXCrzg/UJALoJRmoLI/AAAAAAAABo8/_c1s8iHfZrg/s500/20121031-01.png" alt=""/></figure>



<p></p>



<p>表示されたURL（http://localhost:7357）を、テストしたいブラウザで開きます。すると…</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-RBqfnMLtAEE/UJALojblQxI/AAAAAAAABo8/BxySZa4wyKk/s500/20121031-03.png" alt=""/></figure>



<p></p>



<p>ブラウザにはJasmineのテスト結果が。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-QUbIOHh-vo0/UJALoBMroFI/AAAAAAAABo8/uGn0I0tuapY/s500/20121031-02.png" alt=""/></figure>



<p></p>



<p>ターミナルにもテスト結果が表示されます。</p>



<h3 class="wp-block-heading">ファイル更新を検知してくれる</h3>



<p>ソースファイルあるいはtestem.jsonを編集すると、更新を検知してブラウザとターミナルを自動的にリフレッシュしてくれます。 わざわざブラウザをアクティブにして更新する必要はありません。後はひたすらテストを書いていくのみです。</p>



<h2 class="wp-block-heading">実行時に自動的にブラウザを開く</h2>



<p>わざわざURLをコピーしてブラウザのアドレスバーに貼り付けるのが面倒！ そんな人の為に、<em>&#8220;launch_in_dev&#8221;</em>という設定項目があります。 設定ファイルにこれを追記する事で、<em>testem</em>コマンド実行時に自動的に、指定したブラウザでURLを開いてくれます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">{
    <span class="hljs-string">"launch_in_dev"</span> : &#91;
        <span class="hljs-string">"Chrome"</span>
    ],
    ...
}
</code></span></pre>


<p>使えるブラウザのリストは、次のコマンドで知ることができます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ testem launchers
</code></span></pre>


<p>Windows環境ならIE7,IE8,IE9等も表示されますね。 公式のREADMEによれば、IE9のモード切り替えでのテストだそうです。</p>



<p>ただし、この設定はテスト開始時に新しいウィンドウを開いてしまいます。 その開き方が好きでない方は、大人しくブックマークに登録しておきましょう。 （私はそうしました）</p>



<h2 class="wp-block-heading">Nettuts+ のチュートリアル</h2>



<p>基本的な部分は上で紹介していますが、CofeeScriptのコンパイルを挟んだりなど、 もう少し突っ込んだ使い方はNettuts+のチュートリアル動画でわかりやすく解説されていました。 英語ですが、作業画面見ているだけでも参考になると思います。</p>



<h3 class="wp-block-heading"><a href="http://www.youtube.com/watch?v=I0Py_tqCkTo">Make JavaScript Testing Fun With Testem &#8211; YouTube</a></h3>



<p><iframe width="500" height="375" src="http://www.youtube.com/embed/I0Py_tqCkTo" frameborder="0" allowfullscreen=""></iframe></p>



<p>cf) <a href="http://net.tutsplus.com/tutorials/javascript-ajax/make-javascript-testing-fun-with-testem/">Make JavaScript Testing Fun With Testem | Nettuts+</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>面倒な部分を全部任せられるので、快適にテストをはじめられますね。 テストフレームワークだけでも有難いのに、至れり尽くせりで幸せです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP: CodeIgniterをセキュアに使うチュートリアル</title>
		<link>https://blog.mach3.jp/2010/07/08/php-codeigniter-security.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 08 Jul 2010 00:16:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/07/08/php-codeigniter%e3%82%92%e3%82%bb%e3%82%ad%e3%83%a5%e3%82%a2%e3%81%ab%e4%bd%bf%e3%81%86%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab.html</guid>

					<description><![CDATA[PHPフレームワークは数多く公開されておりますが、 中でも個人的にお気に入りなのはシンプル・軽量さが売りのCodeIgniterです。 » CodeIgniter &#8211; Open source PHP web  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPフレームワークは数多く公開されておりますが、<br />
中でも個人的にお気に入りなのはシンプル・軽量さが売りのCodeIgniterです。<br />
» <a href="http://codeigniter.com/" target="_blank">CodeIgniter &#8211; Open source PHP web application framework</a><br />
この度Nettuts+でCodeIgniterをセキュアに使うためのチュートリアルが紹介されていました。</p>



<p>※2010/08/07 セッションエンコーディングの項で、キー文字列を入力した例を追記</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TDSZBzTl3wI/AAAAAAAAA9w/zE4KjrHWOj4/s800/201007072219.png" alt="CodeIgniter"/></figure>



<p></p>



<span id="more-2246"></span>



<p><a href="http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-security/">CodeIgniter from Scratch: Security | Nettuts+</a></p>



<p><embed src="http://blip.tv/play/gcMVgeq9QAI%2Em4v" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"><br />
</p>



<p>こちらがそのチュートリアルビデオなのですが…<br />
35分と大変長いので、要点だけ下にまとめておきます。<br />
ビデオではスクラッチから書いていて大変わかりやすいので、<br />
時間がある時に見ておくと良いと思います！<br />
英語ですが、コードだけ見ていても参考になります。</p>



<ol class="wp-block-list">
<li><a href="#security-1">パラメータに使用される文字を制限する</a></li>



<li><a href="#security-2">パスワードエンコーディング</a></li>



<li><a href="#security-3">SQLインジェクション対策</a></li>



<li><a href="#security-4">クロスサイトスクリプティング対策</a></li>



<li><a href="#security-5">セッションエンコーディング</a></li>



<li><a href="#security-6">PHPのエラー表示を消す</a></li>



<li><a href="#security-7">プライベートメソッドを使う</a></li>
</ol>



<h2 class="wp-block-heading" id="security-1">1. パラメータに使用される文字を制限する</h2>



<p>CodeIgniterはURLの一部をメソッドの引数として受け取りますが、<br />
そこで使用可能な文字をconfig.phpで厳しく管理しています。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$config&#91;<span class="hljs-string">'permitted_uri_chars'</span>] = <span class="hljs-string">'a-z 0-9~%.:_-'</span>;
</code></span></pre>


<p>正規表現の書式で指定されているここの値を、より厳格にする事で<br />
クライアント側からの予期せぬインプットを防ぐ事が出来ます。<br />
制作するアプリケーションによって中身を精査すると良いでしょう。</p>



<h2 class="wp-block-heading" id="security-2">2. パスワードエンコーディング</h2>



<p>sha1やmd5等のPHPに既存の関数ではなく、<br />
よりセキュアにエンコーディング出来るencryptライブラリの使用が推奨されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;library(<span class="hljs-string">"encrypt"</span>);
<span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;encode($mypassword);
</code></span></pre>


<p>encryptライブラリは、キーとなる文字列を第二引数に指定する事で、<br />
可逆エンコードする事も出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$key = <span class="hljs-string">"this is private key string"</span>;

$encoded_password = <span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;encode($mypassword, $key); <span class="hljs-comment">// エンコード</span>
$decoded_password = <span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;decode($encoded_password, $key); <span class="hljs-comment">//デコード</span>
</code></span></pre>


<p>cf) <a href="http://codeigniter.jp/user_guide_ja/libraries/encryption.html">暗号化クラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-3">3. SQLインジェクション対策</h2>



<p>SQLインジェクション攻撃に備えて、<br />
クライアント側からインプットされた値をDBに渡す前に消毒してやります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;database();
$query = <span class="hljs-keyword">$this</span>-&gt;db-&gt;query(<span class="hljs-string">"SELECT * FROM users WHERE name = {$this-&gt;db-&gt;escape($name)}"</span>);
</code></span></pre>


<p>また、ActiveRecordクラスを使用する事で<br />
最小限のスクリプティングでDBへアクセスする事が出来ます。<br />
この場合、入力された値のエスケープは自動で行わるので、意識する必要がありません。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;database();
$query = <span class="hljs-keyword">$this</span>-&gt;db-&gt;select(<span class="hljs-string">"*"</span>)-&gt;from(<span class="hljs-string">"users"</span>)-&gt;where(<span class="hljs-string">"name"</span>,$name);
</code></span></pre>


<p>cf) <a href="http://codeigniter.jp/user_guide_ja/database/active_record.html">Active Record クラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-4">4. クロスサイトスクリプティング対策</h2>



<p>いわゆるXSSという奴です。<br />
この攻撃に備えて、値のインプットとアウトプット両方において<br />
フィルタをかけてやる必要があります。</p>



<h3 class="wp-block-heading">■インプット</h3>



<p>インプットは、$_POSTを使わずに入力クラスを用いて値を受け取りましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;input-&gt;post(<span class="hljs-string">"comment"</span>, <span class="hljs-keyword">true</span>);
</code></span></pre>


<p>第二引数にtrueを渡す事で、XSSフィルタを入力された値に適用できます。<br />
また、config.phpでの設定で、XSSフィルタリングをデフォルトでかける事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// /system/application/config/config.php</span>
$config&#91;<span class="hljs-string">'global_xss_filtering'</span>] = <span class="hljs-keyword">TRUE</span>;
</code></span></pre>


<p>これで第二引数がなくともXSSフィルタがかかるようになりました。</p>



<p>単独でフィルタが使いたい場合は、xss_cleanメソッドを使いましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$clean_string = <span class="hljs-keyword">$this</span>-&gt;input-&gt;xss_clean($string);
</code></span></pre>


<h3 class="wp-block-heading">■アウトプット</h3>



<p>アウトプット時は、PHP組み込みのhtmlspecialcharsを用いるか、</p>


<pre class="wp-block-code"><span><code class="hljs language-php">htmlspecialchars($string);
</code></span></pre>


<p>または、CodeIgniterのヘルパ関数による出力をする事で<br />
自動的にフィルタリングがかけられます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;helper(<span class="hljs-string">"url"</span>);
<span class="hljs-keyword">echo</span> anchor($url);
</code></span></pre>


<h2 class="wp-block-heading" id="security-5">5. セッションエンコーディング</h2>



<p>CodeIgniterのセッションはPHP組み込みのセッションを使用せず、<br />
独自のセッションデータを生成して利用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;library(<span class="hljs-string">"session"</span>);
<span class="hljs-keyword">$this</span>-&gt;session-&gt;set_userdata(<span class="hljs-string">"user_id"</span>, <span class="hljs-number">2</span>); <span class="hljs-comment">//セッションデータの入力</span>
<span class="hljs-keyword">$this</span>-&gt;session-&gt;userdata(<span class="hljs-string">"user_id"</span>); <span class="hljs-comment">//セッションデータの取得</span>
</code></span></pre>


<p>上のように、ログイン状態を保持する場合等に頻繁に使われますが、<br />
cookieを覗いて見ると、user_idの値が丸見えになっていて大変危険です。<br />
これを保護する為に、セッションエンコード用のキー文字列を<br />
config.phpで設定してやりましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// /system/application/config/config.php :</span>
$config&#91;<span class="hljs-string">'encryption_key'</span>] = <span class="hljs-string">""</span>;
</code></span></pre>


<p>デフォルトでは空白なので、なんらかの文字列を入れてあげましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$config&#91;<span class="hljs-string">'encryption_key'</span>] = <span class="hljs-string">"QEE3Ka2A9ABYhY4dU2VIQau8"</span>;
</code></span></pre>


<p>» <a href="http://codeigniter.jp/user_guide_ja/libraries/sessions.html">セッションクラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-6">6. PHPのエラー表示を消す</h2>



<p>デフォルトがE_ALLになっているので0を入れてあげましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// /index.php :</span>
error_reporting(<span class="hljs-number">0</span>);
</code></span></pre>


<h2 class="wp-block-heading" id="security-7">7. プライベートメソッドを使う</h2>



<p>コントローラ内のメソッドは基本的に全てアクセス可能ですが、<br />
プライベートな物としてコントローラの中でのみ使いたい、<br />
そんな時はメソッドの頭にアンダースコアをつけてあげると、<br />
外部からのアクセスが出来なくなり、ブラウザでアクセスしても404となります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Hoge</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-comment">/* 中略 */</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">public_method</span> (<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">// アクセス可能</span>
    }
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">_secret_method</span> (<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">// アクセス不可（404）</span>
    }
}
</code></span></pre>


<p>アクセスされる事が好ましくないメソッドは、<br />
プライベートメソッドとして宣言しておきましょう。</p>



<p>以上です。<br />
日々注意しつつ、安全なアプリケーション制作をこころがけましょう！<br />
（と、主に自分に言い聞かせる）</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
