<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2121799831198670838</id><updated>2012-01-31T22:18:26.786+09:00</updated><category term='ロケール'/><category term='クソアプリ'/><category term='Fedora'/><category term='インシデント'/><category term='MaxTo'/><category term='ギャル'/><category term='クソ日本'/><category term='WHEN'/><category term='ホストOS'/><category term='ピチカートデザイン'/><category term='ゴミ'/><category term='クマムシ'/><category term='動画'/><category term='この世の終わり'/><category term='Windows'/><category term='アメブロ'/><category term='翻訳'/><category term='ダンジョンマスター'/><category term='多言語'/><category term='俺流'/><category term='THE TERMINAL'/><category term='compact()'/><category term='開発'/><category term='Regexxer'/><category term='Skype'/><category term='バックアップ'/><category term='FTPS'/><category term='管理者'/><category term='Rhytmbox'/><category term='Oblivion'/><category term='配列'/><category term='タスクフォース'/><category term='p7z'/><category term='FTP'/><category term='ソードM5'/><category term='cakephp 1.3'/><category term='GIMP'/><category term='torrent'/><category term='アクティベーション'/><category term='ストーカー'/><category term='.htaccess'/><category term='ケツ'/><category term='Apache'/><category term='送受信'/><category term='mozc'/><category term='ブリッジ接続'/><category term='IBus'/><category term='カウロバクター'/><category term='PHP 5.3'/><category term='i18n'/><category term='ローカル'/><category term='Plugin'/><category term='プラグイン'/><category term='SSH'/><category term='ヘルパー'/><category term='ノマド'/><category term='CSS'/><category term='Gstream'/><category term='バーチャルフィールド'/><category term='検索'/><category term='ローカライズ'/><category term='繋がらない'/><category term='Opera'/><category term='受信'/><category term='Behavior'/><category term='連想配列'/><category term='整列'/><category term='NetBeans'/><category term='ログアウト'/><category term='root'/><category term='グラフ'/><category term='Smarty'/><category term='gedit'/><category term='ゼッド'/><category term='mp3'/><category term='extract()'/><category term='コードハイライト'/><category term='sha1'/><category term='再起動'/><category term='JELLY JELLY CAFE'/><category term='半角'/><category term='unsigned'/><category term='LibreOffice'/><category term='アドレス帳'/><category term='豚'/><category term='Postfix'/><category term='iso'/><category term='普段の作業'/><category term='input'/><category term='データベース'/><category term='Oracle'/><category term='ハルテリア'/><category term='悪魔'/><category term='無許可'/><category term='プレゼン'/><category term='なんちゃって動画'/><category term='同意'/><category term='交流'/><category term='Webアプリ'/><category term='登録'/><category term='Livedoor'/><category term='Bake'/><category term='地獄'/><category term='SSL'/><category term='wmv'/><category term='勉強会'/><category term='開発環境'/><category term='ワイド液晶'/><category term='Facebook'/><category term='VMWare Tools'/><category term='yumex'/><category term='壊れたおもちゃ'/><category term='VMｗａｒｅ'/><category term='重複投稿'/><category term='VMWare Player'/><category term='セキュリティ'/><category term='二重投稿'/><category term='フレームワーク'/><category term='HGFS'/><category term='アマレココ'/><category term='RDBMS'/><category term='CSV'/><category term='SCP'/><category term='Component'/><category term='Google'/><category term='ページャ'/><category term='FFFTP'/><category term='PHP'/><category term='チェックサム'/><category term='あれ'/><category term='Audacity'/><category term='CakePHP2.0'/><category term='インボックスゼロ'/><category term='ダウンロード'/><category term='Linux'/><category term='仮想マシン'/><category term='クライアント'/><category term='ゾーンファイル'/><category term='mod_rewrite'/><category term='samba'/><category term='ID3'/><category term='続行'/><category term='RewriteRule'/><category term='国際化'/><category term='md5'/><category term='xinetd'/><category term='キャプチャ'/><category term='NextFTP'/><category term='移行'/><category term='フィールド'/><category term='DNS'/><category term='SQL'/><category term='Poedit'/><category term='ゲーム'/><category term='Model'/><category term='ウィジェット'/><category term='HTTPD'/><category term='削除'/><category term='デフラグ'/><category term='Schema'/><category term='SELinux'/><category term='トーハム日記'/><category term='sweethome3d'/><category term='BIND'/><category term='XAMPP'/><category term='Sylpheed'/><category term='消す'/><category term='epel'/><category term='インポート'/><category term='DOM'/><category term='jqPlot'/><category term='yum'/><category term='Git'/><category term='フォーム'/><category term='Yahooメール'/><category term='次へ'/><category term='リゾルバ'/><category term='Webサーバ'/><category term='Mac'/><category term='wing'/><category term='コラボ'/><category term='アカウント'/><category term='メーラ'/><category term='コ・ワーキング'/><category term='ライフハック'/><category term='CakePHP'/><category term='BitComet'/><category term='クロス集計'/><category term='破損'/><category term='iconv.dll'/><category term='jQuery'/><category term='カスタマイズ'/><category term='MySQL'/><category term='モビルスーツ'/><category term='スキルアップ'/><category term='インストール'/><category term='Thunderbird'/><category term='SFTP'/><category term='CentOS'/><category term='ゲストOS'/><category term='Gmail'/><category term='便利'/><category term='CakeDC'/><category term='Blogger'/><category term='bash'/><category term='CASE'/><category term='ページネータ'/><category term='logrotate'/><category term='ネイティブフォント'/><category term='設定'/><category term='Regex'/><category term='解像度'/><category term='言語切替'/><category term='rsyslog'/><category term='使い方'/><category term='送信'/><category term='Premiere Elements'/><category term='swf'/><category term='ハック'/><category term='あし＠'/><category term='JavaScript'/><category term='pChart'/><category term='シラサカマイ'/><category term='アドオン'/><category term='メール'/><category term='Twitter'/><category term='MVC'/><category term='クレセンタス'/><category term='シャットダウン'/><category term='Zenkaku_Hankaku'/><category term='リダイレクト'/><category term='IF'/><category term='eat the Cake'/><category term='RewriteEngine'/><category term='コワーキング'/><category term='ブリトニー'/><category term='ランキング'/><category term='Hotmail'/><category term='お洒落'/><category term='RewriteCond'/><category term='evolution'/><category term='エンジニア'/><category term='GNOME'/><category term='ビュー'/><category term='シラサカショウ'/><category term='zen-coding'/><category term='資料'/><category term='Flaps'/><category term='Blender'/><category term='COALESCE'/><category term='全角'/><category term='トーハム'/><category term='劇場版'/><category term='個人情報保護'/><category term='swat'/><category term='無断'/><category term='XHTML'/><category term='L10n'/><category term='Inbox Zero'/><category term='メンテナンス'/><category term='ZenBack'/><category term='集計'/><category term='エクスポート'/><category term='餅は餅屋'/><category term='分割'/><category term='syslog'/><category term='Filezilla'/><category term='PowerDirector'/><category term='RabbitVCS'/><category term='Search'/><category term='アングロサクソニアン'/><category term='ぴゅう太'/><category term='カハマルカ'/><category term='EasyTAG'/><category term='flash-plugin'/><category term='作業'/><category term='原宿'/><category term='投票'/><category term='Nautilus'/><category term='Advent Calendar'/><category term='SEO'/><category term='MTA'/><category term='レポート'/><category term='デザイナ'/><category term='変数'/><category term='Controller'/><category term='Fedora15'/><category term='iptables'/><category term='remi'/><category term='SVN'/><category term='THEN'/><category term='LT'/><title type='text'>トーハム紀行</title><subtitle type='html'>NetBeans, eclipse, CakePHP, Apache, Nginx, Node.js, MySQL, SQLite, BIND, Postfix, Java, Python, Tcl, HTML, CSS, jQuery, Blender, Linux, Android, GIMP, InkScape, LibreOffice,  Fedora, Google, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://torhamzedd.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6639095608458127425</id><published>2012-01-26T17:08:00.001+09:00</published><updated>2012-01-27T12:53:50.711+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unsigned'/><category scheme='http://www.blogger.com/atom/ns#' term='Bake'/><category scheme='http://www.blogger.com/atom/ns#' term='Model'/><category scheme='http://www.blogger.com/atom/ns#' term='Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='Controller'/><category scheme='http://www.blogger.com/atom/ns#' term='Component'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Behavior'/><title type='text'>CakePHP2.0のコンソールを使ってラクラク自動生成しよう【2/3】</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;■前回の続き&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torhamzedd.blogspot.com/2012/01/cakephp2013.html"&gt;前回&lt;/a&gt;はデータベーススキーマに関するコンソール操作を説明したんだけど、なかなか興味深い内容だったと思う。&lt;br /&gt;&lt;br /&gt;今回はいわゆるBake（ベイク）を使ってみる予定。&lt;br /&gt;BakeというのはCakePHPというケーキを美味しく焼きあげるために用意された、いわばCakePHPのユーザランドファイルの自動生成ライブラリだ。簡単な設定で面倒な各種ファイルの準備をしてくれる。&lt;br /&gt;&lt;br /&gt;作業に先立ち、今回のスキーマを書いておくので、コピペする人は参考にされたし。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Config/Schema/schema.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;class AppSchema extends CakeSchema {&lt;br /&gt;&lt;br /&gt;  public function before($event = array()) {&lt;br /&gt;    return true;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function after($event = array()) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public $users = array(&lt;br /&gt;    'id' =&amp;gt; array('type' =&amp;gt; 'integer', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 5, 'key' =&amp;gt; 'primary', 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'username' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 64, 'key' =&amp;gt; 'index',     'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'password' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 40, 'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'is_enabled' =&amp;gt; array('type' =&amp;gt; 'boolean', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'is_deleted' =&amp;gt; array('type' =&amp;gt; 'boolean', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'created' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'modefied' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'indexes' =&amp;gt; array('PRIMARY' =&amp;gt; array('column' =&amp;gt; 'id', 'unique' =&amp;gt; 1), 'users_idx' =&amp;gt; array('column' =&amp;gt; array('username', 'password', 'is_enabled', 'is_deleted', 'created', 'modefied'), 'unique' =&amp;gt; 0)),&lt;br /&gt;    'tableParameters' =&amp;gt; array('charset' =&amp;gt; 'utf8', 'collate' =&amp;gt; 'utf8_general_ci', 'engine' =&amp;gt; 'InnoDB')&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  public $profiles = array(&lt;br /&gt;    'id' =&amp;gt; array('type' =&amp;gt; 'integer', 'null' =&amp;gt; false, 'default' =&amp;gt; null, 'length' =&amp;gt; 5, 'key' =&amp;gt; 'primary', 'collate' =&amp;gt; null, 'comment' =&amp;gt; ''),&lt;br /&gt;    'user_id' =&amp;gt; array( 'type' =&amp;gt; 'integer', 'null' =&amp;gt; false, 'default' =&amp;gt; null, 'length' =&amp;gt; 5, 'key' =&amp;gt; 'index', 'collate' =&amp;gt; null, 'comment' =&amp;gt; '' ),&lt;br /&gt;    'name' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 32, 'key' =&amp;gt; 'index',     'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '表示名', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'created' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'modified' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'indexes' =&amp;gt; array('PRIMARY' =&amp;gt; array('column' =&amp;gt; 'id', 'unique' =&amp;gt; 1), 'profile_idx' =&amp;gt; array('column' =&amp;gt; array('user_id', 'name', 'created', 'modified'), 'unique' =&amp;gt; 1)),&lt;br /&gt;    'tableParameters' =&amp;gt; array('charset' =&amp;gt; 'utf8', 'collate' =&amp;gt; 'utf8_general_ci', 'engine' =&amp;gt; 'InnoDB')&lt;br /&gt;  );&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;このファイルを作成後、コンソールでスキーマを自動生成。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;$ ./cake schema -app ../../app create&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;このままでもいいんだけど、int型がただの整数になってしまっているので、可能であれば符号なしの正の数にしておきたい。&lt;br /&gt;&lt;br /&gt;MySQL WorkbenchやphpMyAdminなどのGUIツールでunsignedに変更しても良いし、以下のSQLを実行するなどで対応しておこう。&lt;br /&gt;&lt;pre class="sql:nogutter" name="code"&gt;ALTER TABLE  `profiles` CHANGE  `id`  `id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT&lt;br /&gt;ALTER TABLE  `profiles` CHANGE  `user_id`  `user_id` INT( 5 ) UNSIGNED NOT NULL&lt;br /&gt;ALTER TABLE  `users` CHANGE  `id`  `id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT&lt;br /&gt;ALTER TABLE  `users` CHANGE  `is_enabled`  `is_enabled` TINYINT( 1 ) UNSIGNED NOT NULL COMMENT  '使用フラグ',&lt;br /&gt;CHANGE  `is_deleted`  `is_deleted` TINYINT( 1 ) UNSIGNED NOT NULL COMMENT  '削除フラグ'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;出来ればschemaコマンド側でこの対応をしてもらうと助かるんだけどね。しばらく掛かりそう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■モデルを作ってみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、すでにデータベーススキーマが生成されているので、Bakeがモデルを認識してくれるはず。&lt;br /&gt;一旦Bakeを起動して確かめてみよう。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;$ ./cake bake -app ../../app&lt;br /&gt;&lt;/pre&gt;このコマンドがBakeの基本だ。正しく入力すると、以下のようなメニューが表示される。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;Welcome to CakePHP v2.0.5 Console&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;App : app&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Interactive Bake Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;[D]atabase Configuration&lt;br /&gt;[M]odel&lt;br /&gt;[V]iew&lt;br /&gt;[C]ontroller&lt;br /&gt;[P]roject&lt;br /&gt;[F]ixture&lt;br /&gt;[T]est case&lt;br /&gt;[Q]uit&lt;br /&gt;What would you like to Bake? (D/M/V/C/P/F/T/Q) &lt;br /&gt;&amp;gt; &lt;br /&gt;&lt;/pre&gt;上から順に説明すると、&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;[D]atabase Configuration&lt;/dt&gt;&lt;dd&gt;app/Config/database.phpの自動生成&lt;/dd&gt;&lt;dt&gt;[M]odel&lt;/dt&gt;&lt;dd&gt;app/Model内にモデルファイル自動生成&lt;/dd&gt;&lt;dt&gt;[V]iew&lt;/dt&gt;&lt;dd&gt;app/View内にビューファイル自動生成&lt;/dd&gt;&lt;dt&gt;[C]ontroller&lt;/dt&gt;&lt;dd&gt;app/Controller内にコントローラファイル自動生成&lt;/dd&gt;&lt;dt&gt;[P]roject&lt;/dt&gt;&lt;dd&gt;appと同じフォルダ構造（プロジェクト）を自動生成&lt;/dd&gt;&lt;dt&gt;[F]ixture&lt;/dt&gt;&lt;dd&gt;テストで使うフィクスチャ自動生成&lt;/dd&gt;&lt;dt&gt;[T]est case&lt;/dt&gt;&lt;dd&gt;テストケース自動生成&lt;/dd&gt;&lt;dt&gt;[Q]uit&lt;/dt&gt;&lt;dd&gt;Bakeの終了&lt;/dd&gt; &lt;/dl&gt;となっている。&lt;br /&gt;&lt;br /&gt;ちなみにコマンドで直接指定することも可能だ。&lt;br /&gt;その場合、上記には表示されてないが、プラグインも可能となっている。&lt;br /&gt;&lt;br /&gt;以下がそのコマンドになる。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;$ cake bake ＜オプション＞&lt;br /&gt;&lt;/pre&gt;オプションは以下が使用可能。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;db_config&lt;/li&gt;&lt;li&gt;model&lt;/li&gt;&lt;li&gt;view&lt;/li&gt;&lt;li&gt;controller&lt;/li&gt;&lt;li&gt;project&lt;/li&gt;&lt;li&gt;fixture&lt;/li&gt;&lt;li&gt;test&lt;/li&gt;&lt;li&gt;plugin ＜プラグイン名＞&lt;/li&gt;&lt;li&gt;all&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;今回はすでにデータベーススキーマが存在しているのが前提なので、モデルから作ってみよう。「m」もしくは「M」をタイプしてEnterする。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;---------------------------------------------------------------&lt;br /&gt;Interactive Bake Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;[D]atabase Configuration&lt;br /&gt;[M]odel&lt;br /&gt;[V]iew&lt;br /&gt;[C]ontroller&lt;br /&gt;[P]roject&lt;br /&gt;[F]ixture&lt;br /&gt;[T]est case&lt;br /&gt;[Q]uit&lt;br /&gt;What would you like to Bake? (D/M/V/C/P/F/T/Q) &lt;br /&gt;&amp;gt; m ◀ モデルを自動生成させるので「m」もしくは「M」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Bake Model&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/Model/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Use Database Config: (default/test) &lt;br /&gt;[default] &amp;gt; ◀ database.phpの$defaultを使用するので「Enter」&lt;br /&gt;&lt;br /&gt;Possible Models based on your current database:&lt;br /&gt;1. Profile&lt;br /&gt;2. User&lt;br /&gt;Enter a number from the list above,&lt;br /&gt;type in the name of another model, or 'q' to exit  &lt;br /&gt;[q] &amp;gt; 1 ◀ Profileモデルを先に作るので「1」&lt;br /&gt;&lt;br /&gt;Would you like to supply validation criteria &lt;br /&gt;for the fields in your model? (y/n) &lt;br /&gt;[y] &amp;gt; n ◀ バリデーションはとりあえず後にするので「n」&lt;br /&gt;&lt;br /&gt;Would you like to define model associations&lt;br /&gt;(hasMany, hasOne, belongsTo, etc.)? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ Userモデルとアソシエーションするので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;One moment while the associations are detected.&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Please confirm the following associations:&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Profile belongsTo User? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ Profile belongs to Userなので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like to define some additional model associations? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ 他にアソシエーション張るモデルは無いので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;The following Model will be created:&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Name:       Profile&lt;br /&gt;DB Table:   `profiles`&lt;br /&gt;Associations:&lt;br /&gt;        Profile belongsTo User&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Look okay? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ これで良いか？と聞かれるので「y」もしくは「Enter」&lt;br /&gt;&lt;/pre&gt;これだけの問答で、以下のソースが生成されるんだ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Model/Profile.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;App::uses('AppModel', 'Model');&lt;br /&gt;/**&lt;br /&gt; * Profile Model&lt;br /&gt; *&lt;br /&gt; * @property User $User&lt;br /&gt; */&lt;br /&gt;class Profile extends AppModel {&lt;br /&gt;/**&lt;br /&gt; * Display field&lt;br /&gt; *&lt;br /&gt; * @var string&lt;br /&gt; */&lt;br /&gt; public $displayField = 'name';&lt;br /&gt;&lt;br /&gt; //The Associations below have been created with all possible keys, those that are not needed can be removed&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * belongsTo associations&lt;br /&gt; *&lt;br /&gt; * @var array&lt;br /&gt; */&lt;br /&gt; public $belongsTo = array(&lt;br /&gt;  'User' =&amp;gt; array(&lt;br /&gt;   'className' =&amp;gt; 'User',&lt;br /&gt;   'foreignKey' =&amp;gt; 'user_id',&lt;br /&gt;   'conditions' =&amp;gt; '',&lt;br /&gt;   'fields' =&amp;gt; '',&lt;br /&gt;   'order' =&amp;gt; ''&lt;br /&gt;  )&lt;br /&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;同じように、Userモデルも作ってみよう。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;---------------------------------------------------------------&lt;br /&gt;Bake Model&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/Model/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Possible Models based on your current database:&lt;br /&gt;1. Profile&lt;br /&gt;2. User&lt;br /&gt;Enter a number from the list above,&lt;br /&gt;type in the name of another model, or 'q' to exit  &lt;br /&gt;[q] &amp;gt; 2 ◀ Userモデルを作るので「2」&lt;br /&gt;&lt;br /&gt;A displayField could not be automatically detected&lt;br /&gt;would you like to choose one? (y/n) &lt;br /&gt;&amp;gt; n ◀ $displayFieldが自動検出できなかったが使わないので「n」&lt;br /&gt;&lt;br /&gt;Would you like to supply validation criteria &lt;br /&gt;for the fields in your model? (y/n) &lt;br /&gt;[y] &amp;gt; n ◀ バリデーションはとりあえず後にするので「n」&lt;br /&gt;&lt;br /&gt;Would you like to define model associations&lt;br /&gt;(hasMany, hasOne, belongsTo, etc.)? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ Profileとアソシエーション張るので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;One moment while the associations are detected.&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Please confirm the following associations:&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;User hasMany Profile? (y/n) &lt;br /&gt;[y] &amp;gt; n ◀ hasManyではないので「n」&lt;br /&gt;&lt;br /&gt;User hasOne Profile? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ hasOneなので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like to define some additional model associations? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ 他にアソシエーション張るモデルは無いので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;The following Model will be created:&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Name:       User&lt;br /&gt;DB Table:   `users`&lt;br /&gt;Associations:&lt;br /&gt;        User hasOne Profile&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Look okay? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ これで良いか？と聞かれるので「y」もしくは「Enter」&lt;br /&gt;&lt;/pre&gt;これでProfile.phpと同じように、以下のソースが自動生成される。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Model/User.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;App::uses('AppModel', 'Model');&lt;br /&gt;/**&lt;br /&gt; * User Model&lt;br /&gt; *&lt;br /&gt; * @property Profile $Profile&lt;br /&gt; */&lt;br /&gt;class User extends AppModel {&lt;br /&gt;&lt;br /&gt; //The Associations below have been created with all possible keys, those that are not needed can be removed&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * hasOne associations&lt;br /&gt; *&lt;br /&gt; * @var array&lt;br /&gt; */&lt;br /&gt; public $hasOne = array(&lt;br /&gt;  'Profile' =&amp;gt; array(&lt;br /&gt;   'className' =&amp;gt; 'Profile',&lt;br /&gt;   'foreignKey' =&amp;gt; 'user_id',&lt;br /&gt;   'conditions' =&amp;gt; '',&lt;br /&gt;   'fields' =&amp;gt; '',&lt;br /&gt;   'order' =&amp;gt; ''&lt;br /&gt;  )&lt;br /&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;もうナイス過ぎて下痢しそうだ。&lt;br /&gt;モデルはこれで一旦完了とする。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■コントローラを作ってみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、モデルファイルを自動生成したように、今度はコントローラを作ってみようじゃないか。&lt;br /&gt;どういった内容のアクションを作るのかというと、基本的な以下の5つになる。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Userの一覧&lt;/li&gt;&lt;li&gt;Userの詳細&lt;/li&gt;&lt;li&gt;Userの追加&lt;/li&gt;&lt;li&gt;Userの編集&lt;/li&gt;&lt;li&gt;Userの削除&lt;/li&gt;&lt;/ul&gt;これらのアクションを自動生成してしまおうという話だ。これはすごく便利。&lt;br /&gt;という訳で早速行ってみよう。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;Welcome to CakePHP v2.0.5 Console&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;App : app&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Interactive Bake Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;[D]atabase Configuration&lt;br /&gt;[M]odel&lt;br /&gt;[V]iew&lt;br /&gt;[C]ontroller&lt;br /&gt;[P]roject&lt;br /&gt;[F]ixture&lt;br /&gt;[T]est case&lt;br /&gt;[Q]uit&lt;br /&gt;What would you like to Bake? (D/M/V/C/P/F/T/Q) &lt;br /&gt;&amp;gt; c ◀ Controllerを作るので「c」もしくは「C」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Bake Controller&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/Controller/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Use Database Config: (default/test) &lt;br /&gt;[default] &amp;gt; ◀ database.phpの$defaultを使用するので「Enter」&lt;br /&gt;&lt;br /&gt;Possible Controllers based on your current database:&lt;br /&gt;1. Profiles&lt;br /&gt;2. Users&lt;br /&gt;Enter a number from the list above,&lt;br /&gt;type in the name of another controller, or 'q' to exit  &lt;br /&gt;[q] &amp;gt; 2 ◀ Usersコントローラを作成するので「2」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Baking UsersController&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Would you like to build your controller interactively? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ 対話式に構築していくので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like to use dynamic scaffolding? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ 動的スカフォルドしないので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like to create some basic class methods &lt;br /&gt;(index(), add(), view(), edit())? (y/n) &lt;br /&gt;[n] &amp;gt; y ◀ 一覧、追加、詳細、編集アクションを自動生成するので「y」&lt;br /&gt;&lt;br /&gt;Would you like to create the basic class methods for admin routing? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ 管理用アプリは今は作らないので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like this controller to use other helpers&lt;br /&gt;besides HtmlHelper and FormHelper? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ 今のところHTMLヘルパー、Formヘルパー以外使わないので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like this controller to use any components? (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ コンポーネントはまだ使用しないので「n」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;Would you like to use Session flash messages? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ セッションフラッシュメッセージを使うので「y」もしくは「Enter」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;The following controller will be created:&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Controller Name:&lt;br /&gt;        Users&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Look okay? (y/n) &lt;br /&gt;[y] &amp;gt; y ◀ これでよろしいかと聞かれるので「y」もしくは「Enter」&lt;br /&gt;&lt;/pre&gt;これで以下のようなソースが自動生成される。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Controller/UsersController.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;App::uses('AppController', 'Controller');&lt;br /&gt;/**&lt;br /&gt; * Users Controller&lt;br /&gt; *&lt;br /&gt; * @property User $User&lt;br /&gt; */&lt;br /&gt;class UsersController extends AppController {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * index method&lt;br /&gt; *&lt;br /&gt; * @return void&lt;br /&gt; */&lt;br /&gt; public function index() {&lt;br /&gt;  $this-&amp;gt;User-&amp;gt;recursive = 0;&lt;br /&gt;  $this-&amp;gt;set('users', $this-&amp;gt;paginate());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * view method&lt;br /&gt; *&lt;br /&gt; * @param string $id&lt;br /&gt; * @return void&lt;br /&gt; */&lt;br /&gt; public function view($id = null) {&lt;br /&gt;  $this-&amp;gt;User-&amp;gt;id = $id;&lt;br /&gt;  if (!$this-&amp;gt;User-&amp;gt;exists()) {&lt;br /&gt;   throw new NotFoundException(__('Invalid user'));&lt;br /&gt;  }&lt;br /&gt;  $this-&amp;gt;set('user', $this-&amp;gt;User-&amp;gt;read(null, $id));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * add method&lt;br /&gt; *&lt;br /&gt; * @return void&lt;br /&gt; */&lt;br /&gt; public function add() {&lt;br /&gt;  if ($this-&amp;gt;request-&amp;gt;is('post')) {&lt;br /&gt;   $this-&amp;gt;User-&amp;gt;create();&lt;br /&gt;   if ($this-&amp;gt;User-&amp;gt;save($this-&amp;gt;request-&amp;gt;data)) {&lt;br /&gt;    $this-&amp;gt;Session-&amp;gt;setFlash(__('The user has been saved'));&lt;br /&gt;    $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;   } else {&lt;br /&gt;    $this-&amp;gt;Session-&amp;gt;setFlash(__('The user could not be saved. Please, try again.'));&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * edit method&lt;br /&gt; *&lt;br /&gt; * @param string $id&lt;br /&gt; * @return void&lt;br /&gt; */&lt;br /&gt; public function edit($id = null) {&lt;br /&gt;  $this-&amp;gt;User-&amp;gt;id = $id;&lt;br /&gt;  if (!$this-&amp;gt;User-&amp;gt;exists()) {&lt;br /&gt;   throw new NotFoundException(__('Invalid user'));&lt;br /&gt;  }&lt;br /&gt;  if ($this-&amp;gt;request-&amp;gt;is('post') || $this-&amp;gt;request-&amp;gt;is('put')) {&lt;br /&gt;   if ($this-&amp;gt;User-&amp;gt;save($this-&amp;gt;request-&amp;gt;data)) {&lt;br /&gt;    $this-&amp;gt;Session-&amp;gt;setFlash(__('The user has been saved'));&lt;br /&gt;    $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;   } else {&lt;br /&gt;    $this-&amp;gt;Session-&amp;gt;setFlash(__('The user could not be saved. Please, try again.'));&lt;br /&gt;   }&lt;br /&gt;  } else {&lt;br /&gt;   $this-&amp;gt;request-&amp;gt;data = $this-&amp;gt;User-&amp;gt;read(null, $id);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * delete method&lt;br /&gt; *&lt;br /&gt; * @param string $id&lt;br /&gt; * @return void&lt;br /&gt; */&lt;br /&gt; public function delete($id = null) {&lt;br /&gt;  if (!$this-&amp;gt;request-&amp;gt;is('post')) {&lt;br /&gt;   throw new MethodNotAllowedException();&lt;br /&gt;  }&lt;br /&gt;  $this-&amp;gt;User-&amp;gt;id = $id;&lt;br /&gt;  if (!$this-&amp;gt;User-&amp;gt;exists()) {&lt;br /&gt;   throw new NotFoundException(__('Invalid user'));&lt;br /&gt;  }&lt;br /&gt;  if ($this-&amp;gt;User-&amp;gt;delete()) {&lt;br /&gt;   $this-&amp;gt;Session-&amp;gt;setFlash(__('User deleted'));&lt;br /&gt;   $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;  }&lt;br /&gt;  $this-&amp;gt;Session-&amp;gt;setFlash(__('User was not deleted'));&lt;br /&gt;  $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;NetBeansのナビゲータでコントローラを見てみると、このような感じになっている。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BUiS3cNA9Zc/TyDu72M1dKI/AAAAAAAAFuE/YfGGu7iFOXo/s1600/Screenshot-2012-01-26+15%253A12%253A23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-BUiS3cNA9Zc/TyDu72M1dKI/AAAAAAAAFuE/YfGGu7iFOXo/s1600/Screenshot-2012-01-26+15%253A12%253A23.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;簡単にアクションを説明してみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;indexアクション&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Userモデルから全データを引っ張ってきて、users変数に代入している。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;viewアクション&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;$idをidに持つUserモデルから1つデータを引っ張ってくる。&lt;br /&gt;$idの指定がなかった場合はNotFoundException例外を投げる。&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;addアクション&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;ポストされた場合、入力されたデータをUserモデルに保存する。&lt;br /&gt;保存が失敗したらエラーメッセージをフラッシュする。&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;editアクション&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;$idの指定がなかった場合はNotFoundExceptionという例外を投げる。&lt;br /&gt;$idをidにもつUserモデルから1つデータを引っ張ってくる。&lt;br /&gt;ポストされた場合、入力されたデータをUserモデルに保存する。&lt;br /&gt;ポストされてなければ引っ張ってきたデータをリクエストデータに代入&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;deleteアクション&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;リクエストがpost形式出なかった場合、MethodNotAllowedException例外を投げる。&lt;br /&gt;Userモデルのidプロパティをセットする。&lt;br /&gt;該当するUserモデルがなければNotFoundException例外を投げる。&lt;br /&gt;該当するUserモデルを削除し、メッセージをフラッシュする。&lt;br /&gt;削除に失敗したらエラーメッセージをフラッシュする。&lt;br /&gt;&lt;br /&gt;だいたいこんな感じだ。&lt;br /&gt;同じようにして、ProfileControllerも作っておいてくだされ。&lt;br /&gt;&lt;br /&gt;このBakeで自動生成されたソースはかなり参考になるので、最低一度はBakeでコントローラを作成しておくことをすすめるよ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■ビューをつくってみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、モデル、コントローラとできたら、今度は具体的にブラウザで表示するビューの出番だ。これもBakeで自動生成させてしまおう。&lt;br /&gt;&lt;pre class="html:nogutter" name="code"&gt;Welcome to CakePHP v2.0.5 Console&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;App : app&lt;br /&gt;Path: /cakephp2.0/htdocs/app/Console/../../app/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Interactive Bake Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;[D]atabase Configuration&lt;br /&gt;[M]odel&lt;br /&gt;[V]iew&lt;br /&gt;[C]ontroller&lt;br /&gt;[P]roject&lt;br /&gt;[F]ixture&lt;br /&gt;[T]est case&lt;br /&gt;[Q]uit&lt;br /&gt;What would you like to Bake? (D/M/V/C/P/F/T/Q) &lt;br /&gt;&amp;gt; v ◀ ビューファイルを自動生成するので「v」もしくは「V」&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Bake View&lt;br /&gt;Path: /home/develop/cake2.torhamzedd.com/htdocs/app/Console/../../app/View/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Use Database Config: (default/test) &lt;br /&gt;[default] &amp;gt; ◀ database.phpの$defaultを使用するので「Enter」&lt;br /&gt;&lt;br /&gt;Possible Controllers based on your current database:&lt;br /&gt;1. Profiles&lt;br /&gt;2. Users&lt;br /&gt;Enter a number from the list above,&lt;br /&gt;type in the name of another controller, or 'q' to exit  &lt;br /&gt;[q] &amp;gt; 2 ◀ Usersコントローラがベースになるので「2」&lt;br /&gt;&lt;br /&gt;Would you like bake to build your views interactively?&lt;br /&gt;Warning: Choosing no will overwrite Profiles views if it exist. (y/n) &lt;br /&gt;[n] &amp;gt; n ◀ まだProfile用のビューは作らないので「n」もしくは「Enter」&lt;br /&gt;&lt;/pre&gt;これで、以下のファイルが生成される。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;app/View/Users/add.ctp&lt;/li&gt;&lt;li&gt;app/View/Users/edit.ctp&lt;/li&gt;&lt;li&gt;app/View/Users/index.ctp&lt;/li&gt;&lt;li&gt;app/View/Users/view.ctp&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Usersと同じく、Profilesのビューも作っておいてくだされ。&lt;br /&gt;&lt;br /&gt;これでひと通り、最低限ブラウザで確認できるまで自動生成させることができた。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■ブラウザで見てみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;アクセスするURLは/usersになる。&lt;br /&gt;自動的にUsersControllerのindexアクションが実行され、Users/index.ctpをテンプレートとして表示してくれるはずだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nfxLiAq1TIQ/TyED1AXeoQI/AAAAAAAAFuQ/MK9PF8oaglI/s1600/Screenshot-2012-01-26+16%253A40%253A35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://2.bp.blogspot.com/-nfxLiAq1TIQ/TyED1AXeoQI/AAAAAAAAFuQ/MK9PF8oaglI/s320/Screenshot-2012-01-26+16%253A40%253A35.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これまたなんと凝った画面だこと。&lt;br /&gt;CakePHP1.2の時代に比べると、恐ろしく発展を遂げているではないか。&lt;br /&gt;&lt;br /&gt;画面左側にはナビゲーションまで付いている。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New User&lt;/li&gt;&lt;li&gt;List Profile&lt;/li&gt;&lt;li&gt;New Profile&lt;/li&gt;&lt;/ul&gt;ユーザを追加する際はProfileが別になっているので、少々わかりにくいが、ひと通りの操作ができるようになっている。&lt;br /&gt;&lt;br /&gt;試しに「New User」でユーザを追加してみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pRsywultkl8/TyEG7NNGacI/AAAAAAAAFuc/i895zgwB8u0/s1600/Screenshot-2012-01-26+16%253A55%253A03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://1.bp.blogspot.com/-pRsywultkl8/TyEG7NNGacI/AAAAAAAAFuc/i895zgwB8u0/s320/Screenshot-2012-01-26+16%253A55%253A03.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;適当にデータを入れて、「Submit」ボタンをクリック。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2dA0cRUH1Y0/TyEHKwiIq7I/AAAAAAAAFuk/hriHAt2S0BU/s1600/Screenshot-2012-01-26+16%253A56%253A17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://3.bp.blogspot.com/-2dA0cRUH1Y0/TyEHKwiIq7I/AAAAAAAAFuk/hriHAt2S0BU/s320/Screenshot-2012-01-26+16%253A56%253A17.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正直言うと、赤はやめて欲しいんだけど、どうやら問題なくUserモデルにユーザが追加できたようだ。&lt;br /&gt;セッションフラッシュでメッセージを表示させているようなので、F5キーなどでリロードしたら、この赤い忌々しいメッセージは消える。&lt;br /&gt;&lt;br /&gt;さて、次はプロフィールを追加だ。画面左の「New Profile」をクリック。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2mBfZ3ttK60/TyEHnTMWbFI/AAAAAAAAFus/fRF81rP9Exo/s1600/Screenshot-2012-01-26+16%253A57%253A58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://3.bp.blogspot.com/-2mBfZ3ttK60/TyEHnTMWbFI/AAAAAAAAFus/fRF81rP9Exo/s320/Screenshot-2012-01-26+16%253A57%253A58.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;俺の嫁の名前を入れて、「Submit」ボタンをクリック。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-8F8q4xDGTiw/TyEHs0fxZzI/AAAAAAAAFu0/_IDhJdSLKgg/s1600/Screenshot-2012-01-26+16%253A58%253A12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://2.bp.blogspot.com/-8F8q4xDGTiw/TyEHs0fxZzI/AAAAAAAAFu0/_IDhJdSLKgg/s320/Screenshot-2012-01-26+16%253A58%253A12.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正直言うと、赤はやめて欲しいんだけど、どうやら問題なくProfileモデルにプロフィールが追加できたようだ。&lt;br /&gt;セッションフラッシュでメッセージを表示させているようなので、F5キーなどでリロードしたら、この赤い不安なメッセージは消える。&lt;br /&gt;&lt;br /&gt;「List User」で一旦一覧へ戻り、今追加したユーザの「View」ボタンを押してみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8U2Ww-9iiz8/TyEIUa6k-nI/AAAAAAAAFu8/AOuZcCWXW90/s1600/Screenshot-2012-01-26+17%253A00%253A45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" src="http://4.bp.blogspot.com/-8U2Ww-9iiz8/TyEIUa6k-nI/AAAAAAAAFu8/AOuZcCWXW90/s320/Screenshot-2012-01-26+17%253A00%253A45.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このように、俺の嫁の詳細を確認することができる。&lt;br /&gt;パスワードがモロ出しなのはサービスだ。というのは嘘で、Authコンポーネントを使えば勝手に暗号化してくれるので、安心されたし。&lt;br /&gt;&lt;br /&gt;ちなみに「Delete」する場合、即座には消さない。一旦アラートダイアログが表示され、そこで本当に消すのかどうかを再度確認することができるので、結構安心。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ClGFW5FPiC0/TyEI3nQEK8I/AAAAAAAAFvE/njxzBd29rac/s1600/Screenshot-2012-01-26+17%253A02%253A44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://2.bp.blogspot.com/-ClGFW5FPiC0/TyEI3nQEK8I/AAAAAAAAFvE/njxzBd29rac/s320/Screenshot-2012-01-26+17%253A02%253A44.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;OSやブラウザによっては、予め「OK」にフォーカスが当たっていることがあるので、くれぐれもEnterやスペースキーの連打には要注意だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■終わり&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Bakeは本当に開発を助けてくれると思う。&lt;br /&gt;Webアプリの設計段階でまず、モデルを決めてしまおう。そうすればスキーマが決まり、あとはBakeで焼くだけだ。&lt;br /&gt;&lt;br /&gt;実際には、モデルにはビヘイビア（Behavior）、コントローラにはコンポーネント（Component）、ビューにはヘルパー（Helper）という拡張要素が存在し、ビヘイビアから開発し始めるようなツワモノもいるようだが、慌てないでも大丈夫。いつか、俺も君もそうなる。&lt;br /&gt;&lt;br /&gt;というわけで、ざっくりとBakeを解説してみた。&lt;br /&gt;俺もCakePHP2.0のBakeは初めてなので、いろいろ面白かった。&lt;br /&gt;ぜひみんなにもやってみて欲しいと思う。そしてわかったことを俺にそっと教えてくれれば、少なくともそっちに足を向けて寝ることは無いと思うんで、ぜひよろしくだ。&lt;br /&gt;&lt;br /&gt;次回はPHPUnitを使ったテストケースをかじってみようと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6639095608458127425?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6639095608458127425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6639095608458127425'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2012/01/cakephp2023.html' title='CakePHP2.0のコンソールを使ってラクラク自動生成しよう【2/3】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-BUiS3cNA9Zc/TyDu72M1dKI/AAAAAAAAFuE/YfGGu7iFOXo/s72-c/Screenshot-2012-01-26+15%253A12%253A23.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-4465422097269133704</id><published>2012-01-25T15:14:00.000+09:00</published><updated>2012-01-26T01:50:35.549+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unsigned'/><category scheme='http://www.blogger.com/atom/ns#' term='Bake'/><category scheme='http://www.blogger.com/atom/ns#' term='Model'/><category scheme='http://www.blogger.com/atom/ns#' term='Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='Controller'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP2.0'/><title type='text'>CakePHP2.0のコンソールを使ってラクラク自動生成しよう【1/3】</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;■はじめに&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;CakePHP2.0を使えば、基本的な習得コストを除き、高速にWebアプリケーションの開発ができるんだよ。&lt;br /&gt;高速開発を目指して始めたCakePHPだけど、今では2.0。当時1.1から始めてたけど、機能も豊富になり、洗練されてきた。&lt;br /&gt;ここらで一旦基本に戻り、CakePHP2.0の使い方で新しい発見が無いか試して見ることにしたんだ。&lt;br /&gt;&lt;br /&gt;もしかしたら高速を超えた、超高速な開発が実現できるかもしれない。むしろそれを目指そう。&lt;br /&gt;&lt;br /&gt;実際の作業を行う前に説明しておくけど、Windowsでの作業は説明しないので、Windows環境しか無い人は、VirtualBoxでFedora入れるなりしてLinux環境を構築しておくことをすすめる。&lt;br /&gt;&lt;br /&gt;XAMPPなんかのナンチャッテLinuxで動かすことは全く想定してないんで、あしからず。&lt;br /&gt;&lt;blockquote&gt;ちなみにここらへんの俺の考えは過去記事に書いてあるので興味がある方は以下リンクをクリックされたし。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torhamzedd.blogspot.com/2010/02/xamppwebvmplayer.html"&gt;XAMPPでWeb開発などをしている人は直ぐにVMPlayerに変えたほうが良い【1/8】&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/04/windows16.html"&gt;Windowsにサヨナラだ！！〜 Fedora15 〜【1/6】&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/08/linuxweb13.html"&gt;Linuxを使ったWeb開発環境を手早く構築する【1/3】&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;さて、早速行ってみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■前提条件&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;使用するOSはLinuxとする&lt;/li&gt;&lt;li&gt;Apache、MySQL、PHPなどの設定は適切に完了していることとする&lt;/li&gt;&lt;li&gt;CakePHP2.0のデプロイが完了していてブラウザで閲覧できていることとする&lt;/li&gt;&lt;li&gt;インストール先は/cakephp2.0/htdocs/とする&lt;/li&gt;&lt;li&gt;cakeコマンドは/cakephp2.0/htdocs/app/Consoleに移動しているものとする&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■CakePHP2.0のセットアップ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://cakephp.jp/"&gt;CakePHP2.0をダウンロード&lt;/a&gt;&lt;/li&gt;&lt;li&gt;パーミッションの設定&lt;/li&gt;&lt;li&gt;ブラウザで確認&lt;/li&gt;&lt;/ol&gt;上記は終わらせておいてくだされ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■データベースをつくろう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;MySQL WorkbenchやphpMyAdminなどのGUIツールでデータベース設計しながらテーブル作る、なんてことも楽しいとは思うんだけど、出来れば終始、一つのプラットフォームで同じ入力と出力を期待したい。&lt;br /&gt;&lt;br /&gt;俺の場合、エディタはIDEであるNetBeansを使って開発しているので、端末ウィンドウを表示させ、そのコンソール画面でコマンドラインでデータベースを作るようにしたいんだ。多くの作業がこのコンソールで実現可能なのであれば、いちいち他のツールを起動しなくて済むので、細かい話だけど手間が省けると思う。&lt;br /&gt;&lt;br /&gt;CakePHPでは、app/Config/Schema/の中にスキーマ定義ファイルであるschema.phpが存在すればその内容でテーブルを作ることもできるし、既存のデータベースからschema.phpを自動生成させることも可能だ。&lt;br /&gt;&lt;br /&gt;まず、既存のデータベースからusersテーブルをschema.phpにジェネレートし、schema.phpがどういう内容になっているのかを確認したいので、usersテーブルを以下のSQLで作っておこくことにする。&lt;br /&gt;&lt;pre class="sql" name="code"&gt;CREATE TABLE IF NOT EXISTS `users` (&lt;br /&gt;  `id` int(5) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `username` varchar(64) NOT NULL,&lt;br /&gt;  `passwd` varchar(40) NOT NULL,&lt;br /&gt;  `nickname` varchar(36) NOT NULL,&lt;br /&gt;  `is_enabled` tinyint(1) unsigned NOT NULL,&lt;br /&gt;  `is_deleted` tinyint(1) unsigned NOT NULL,&lt;br /&gt;  `created` datetime NOT NULL,&lt;br /&gt;  `modefied` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `users_idx` (`username`,`passwd`,`nickname`,`is_enabled`,`is_deleted`,`created`,`modefied`)&lt;br /&gt;) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;&lt;/pre&gt;この状態で、コンソールから以下のコマンドを実行する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ ./cake schema -app /cakephp2.0/htdocs/app generate -f&lt;br /&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;b&gt;cake schema -app &lt;span style="color: #aaaaaa;"&gt;＜appの場所＞&lt;/span&gt; generate -f&lt;/b&gt;&lt;br /&gt;-fをつけると全テーブルを対象にしてくれる&lt;/blockquote&gt;そうするとコンソールには以下のように表示され、スキーマファイルが生成されたことがわかる。&lt;br /&gt;&lt;pre class="html" name="code"&gt;Welcome to CakePHP v2.0.5 Console&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;App : app&lt;br /&gt;Path: /cakephp2.0/htdocs/app/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Cake Schema Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Generating Schema...&lt;br /&gt;Schema file: schema.php generated&lt;br /&gt;&lt;/pre&gt;もしすでにschema.phpが存在した場合、以下のように、どうするのかを聞かれる。&lt;br /&gt;&lt;pre class="html" name="code"&gt;Generating Schema...&lt;br /&gt;Schema file exists.&lt;br /&gt;[O]verwrite&lt;br /&gt;[S]napshot&lt;br /&gt;[Q]uit&lt;br /&gt;Would you like to do? (o/s/q) &lt;br /&gt;[s] &amp;gt; &lt;br /&gt;&lt;/pre&gt;上書きするなら「o」、スナップショット（後述）なら「s」、この作業をやめるなら「q」を入力する。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;スナップショットを選択すると、現在存在するschema.phpとは別に、schema_1.php、schema_2.phpと連番で別名のファイルを生成してくれる&lt;/blockquote&gt;というわけで、早速、/app/Config/Schema/schema.phpを見てみよう。&lt;br /&gt;見るのにもcakeコマンドでいける。&lt;br /&gt;&lt;pre class="html" name="code"&gt;./cake schema -app /cakephp2.0/htdocs/app view&lt;br /&gt;&lt;/pre&gt;まぁコンソールでソース見ることはあまりないと思うので、素直にファイルを開いてもOKだと思う。&lt;br /&gt;&lt;pre class="php" name="code"&gt;/* generated on: 2012-01-25 13:55:47 : 1327467347 */&lt;br /&gt;class AppSchema extends CakeSchema {&lt;br /&gt;&lt;br /&gt;  public function before($event = array()) {&lt;br /&gt;    return true;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function after($event = array()) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public $users = array(&lt;br /&gt;    'id' =&amp;gt; array('type' =&amp;gt; 'integer', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 5, 'key' =&amp;gt; 'primary', 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'username' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 64, 'key' =&amp;gt; 'index',     'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'passwd' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 40, 'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'nickname' =&amp;gt; array('type' =&amp;gt; 'string', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'length' =&amp;gt; 36, 'collate' =&amp;gt; 'utf8_general_ci', 'comment' =&amp;gt; '', 'charset' =&amp;gt; 'utf8'),&lt;br /&gt;    'is_enabled' =&amp;gt; array('type' =&amp;gt; 'boolean', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'is_deleted' =&amp;gt; array('type' =&amp;gt; 'boolean', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'created' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'modefied' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'indexes' =&amp;gt; array('PRIMARY' =&amp;gt; array('column' =&amp;gt; 'id', 'unique' =&amp;gt; 1), 'users_idx' =&amp;gt; array('column' =&amp;gt; array('username', 'passwd', 'nickname', 'is_enabled', 'is_deleted', 'created', 'modefied'), 'unique' =&amp;gt; 0)),&lt;br /&gt;    'tableParameters' =&amp;gt; array('charset' =&amp;gt; 'utf8', 'collate' =&amp;gt; 'utf8_general_ci', 'engine' =&amp;gt; 'InnoDB')&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;大体こんな内容になっているはずだ。&lt;br /&gt;この中の$usersプロパティに、usersテーブルの構造が収まっている。&lt;br /&gt;&lt;br /&gt;要するにこのプロパティを手で書いてしまえれば、MySQL WorkbenchやphpMyAdminなんかは使わなくて済む、というわけだ。&lt;br /&gt;&lt;br /&gt;簡単に解析してみる。&lt;br /&gt;&lt;br /&gt;プロパティ名は$usersで、これがこのままテーブル名になる。&lt;br /&gt;配列のキーはそのままフィールド名になっていて、その中も配列になっている。中身はフィールドの内容だ。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;type&lt;/li&gt;&lt;li&gt;null&lt;/li&gt;&lt;li&gt;default&lt;/li&gt;&lt;li&gt;langth&lt;/li&gt;&lt;li&gt;key&lt;/li&gt;&lt;li&gt;collate&lt;/li&gt;&lt;li&gt;comment&lt;/li&gt;&lt;/ul&gt;これはただ単にフィールド名の情報なので、そんなに大変じゃないと思う。&lt;br /&gt;&lt;br /&gt;あとはインデックスだ。インデックスはプロパティ内ではindexesというキーになっていて、その中身は、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PRIMARY&lt;/li&gt;&lt;li&gt;＜インデックス名＞&lt;/li&gt;&lt;/ul&gt;などなど。&lt;br /&gt;&lt;br /&gt;そして最後にテーブル自体の情報のtableParametersだ。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;charset&lt;/li&gt;&lt;li&gt;collate&lt;/li&gt;&lt;li&gt;engine&lt;/li&gt;&lt;/ul&gt;設定する内容が多いので暗記するには少々骨が折れそうだが、CakePHP2.0使いなら一度はやってみても良いと思う。&lt;br /&gt;&lt;br /&gt;今度は逆に、このschema.phpに$profilesプロパティを設定し、profilesテーブルを作って見ることにする。&lt;br /&gt;以下のコードをschema.phpに追記だ。&lt;br /&gt;&lt;br /&gt;まずはフィールド名を固めておき、インデックスとテーブルのプロパティを記述してみる。&lt;br /&gt;&lt;pre class="php" name="code"&gt;public $profiles = array(&lt;br /&gt;    'id' =&amp;gt; array(),&lt;br /&gt;    'user_id' =&amp;gt; array(),&lt;br /&gt;    'image_url' =&amp;gt; array(),&lt;br /&gt;    'created' =&amp;gt; array(),&lt;br /&gt;    'modified' =&amp;gt; array(),&lt;br /&gt;    'indexes' =&amp;gt; array(),&lt;br /&gt;    'tableParameters' =&amp;gt; array()&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;そして肉付けだ。&lt;br /&gt;&lt;pre class="php" name="code"&gt;public $profiles = array(&lt;br /&gt;    'id' =&amp;gt; array(&lt;br /&gt;      'type' =&amp;gt; '',&lt;br /&gt;      'null' =&amp;gt; false,&lt;br /&gt;      'default' =&amp;gt; null,&lt;br /&gt;      'length' =&amp;gt; 5,&lt;br /&gt;      'key' =&amp;gt; 'primary',&lt;br /&gt;      'collate' =&amp;gt; null,&lt;br /&gt;      'comment' =&amp;gt; ''&lt;br /&gt;    ),&lt;br /&gt;    'user_id' =&amp;gt; array(),&lt;br /&gt;    'image_url' =&amp;gt; array(),&lt;br /&gt;    'created' =&amp;gt; array(),&lt;br /&gt;    'modified' =&amp;gt; array(),&lt;br /&gt;    'indexes' =&amp;gt; array(),&lt;br /&gt;    'tableParameters' =&amp;gt; array()&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;最終的に以下のように記述してみた。&lt;br /&gt;&lt;pre class="php" name="code"&gt;public $profiles = array(&lt;br /&gt;    'id' =&amp;gt; array(&lt;br /&gt;      'type' =&amp;gt; 'integer',&lt;br /&gt;      'null' =&amp;gt; false,&lt;br /&gt;      'default' =&amp;gt; null,&lt;br /&gt;      'length' =&amp;gt; 5,&lt;br /&gt;      'key' =&amp;gt; 'primary',&lt;br /&gt;      'collate' =&amp;gt; null,&lt;br /&gt;      'comment' =&amp;gt; ''&lt;br /&gt;    ),&lt;br /&gt;    'user_id' =&amp;gt; array(&lt;br /&gt;      'type' =&amp;gt; 'integer',&lt;br /&gt;      'null' =&amp;gt; false,&lt;br /&gt;      'default' =&amp;gt; null,&lt;br /&gt;      'length' =&amp;gt; 5,&lt;br /&gt;      'key' =&amp;gt; 'index',&lt;br /&gt;      'collate' =&amp;gt; null,&lt;br /&gt;      'comment' =&amp;gt; ''&lt;br /&gt;    ),&lt;br /&gt;    'image_url' =&amp;gt; array(&lt;br /&gt;      'type' =&amp;gt; 'string',&lt;br /&gt;      'null' =&amp;gt; false,&lt;br /&gt;      'default' =&amp;gt; null,&lt;br /&gt;      'length' =&amp;gt; 128,&lt;br /&gt;      'key' =&amp;gt; 'index',&lt;br /&gt;      'collate' =&amp;gt; 'utf8_general_ci',&lt;br /&gt;      'comment' =&amp;gt; 'アバター画像URL'&lt;br /&gt;    ),&lt;br /&gt;    'created' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'modified' =&amp;gt; array('type' =&amp;gt; 'datetime', 'null' =&amp;gt; false, 'default' =&amp;gt; NULL, 'collate' =&amp;gt; NULL, 'comment' =&amp;gt; ''),&lt;br /&gt;    'indexes' =&amp;gt; array(&lt;br /&gt;      'PRIMARY' =&amp;gt; array('column' =&amp;gt; 'id', 'unique' =&amp;gt; 1),&lt;br /&gt;      'profile_idx' =&amp;gt; array('column' =&amp;gt; array('user_id', 'image_url', 'created', 'modified'), 'unique' =&amp;gt; 1),&lt;br /&gt;    ),&lt;br /&gt;    'tableParameters' =&amp;gt; array('charset' =&amp;gt; 'utf8', 'collate' =&amp;gt; 'utf8_general_ci', 'engine' =&amp;gt; 'InnoDB')&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;少々見た目が悪いが、部分的に$usersプロパティからコピーしたので、改行が入ってない部分がある。&lt;br /&gt;これを今度はcreateサブコマンドで、テーブルとしてデータベースに登録させてみよう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;./cake schema -app /cakephp2.0/htdocs/app create&lt;br /&gt;&lt;/pre&gt;そうすると、以下のように聞かれる。&lt;br /&gt;&lt;pre class="html" name="code"&gt;Welcome to CakePHP v2.0.5 Console&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;App : app&lt;br /&gt;Path: /cakephp2.0/htdocs/app/&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Cake Schema Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;The following table(s) will be dropped.&lt;br /&gt;users&lt;br /&gt;profiles&lt;br /&gt;Are you sure you want to drop the table(s)? (y/n) &lt;br /&gt;[n] &amp;gt; &lt;br /&gt;&lt;/pre&gt;テーブルを一旦削除していいかどうか聞かれる。&lt;br /&gt;出来ればプロパティ変数を個別に指定してテーブル毎に作成してもらいたいけど、ヘルプを見る限り、細かい指定は出来なさそう。&lt;br /&gt;「n」と答えて削除しないでやってみたら、「usersテーブルすでにあるから新たに作れねぇぞボケェェェ！！」と怒られた。&lt;br /&gt;素直に「y」で削除しようじゃないか。&lt;br /&gt;&lt;pre class="html" name="code"&gt;The following table(s) will be dropped.&lt;br /&gt;users&lt;br /&gt;profiles&lt;br /&gt;Are you sure you want to drop the table(s)? (y/n) &lt;br /&gt;[n] &amp;gt; y&lt;br /&gt;Dropping table(s).&lt;br /&gt;users updated.&lt;br /&gt;profiles updated.&lt;br /&gt;&lt;br /&gt;The following table(s) will be created.&lt;br /&gt;users&lt;br /&gt;profiles&lt;br /&gt;Are you sure you want to create the table(s)? (y/n) &lt;br /&gt;[y] &amp;gt; y&lt;br /&gt;Creating table(s).&lt;br /&gt;users updated.&lt;br /&gt;profiles updated.&lt;br /&gt;End create.&lt;br /&gt;&lt;/pre&gt;さて、実際にphpMyAdminなどで見てみると、ちゃんとテーブルが生成されているのがわかる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZftNXJ49V_Y/Tx-eGushQeI/AAAAAAAAFtQ/XGwU3hAPD6U/s1600/Screenshot-2012-01-25+14%253A49%253A30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="64" src="http://3.bp.blogspot.com/-ZftNXJ49V_Y/Tx-eGushQeI/AAAAAAAAFtQ/XGwU3hAPD6U/s320/Screenshot-2012-01-25+14%253A49%253A30.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;一つ残念なのが、cake schemaコマンドではフィールド属性で指定した『unsigned』が無視されてしまっているところだ。&lt;br /&gt;&lt;br /&gt;試しに「extra」キーを与えて中身を「unsigned」にしても、ダメだった。&lt;br /&gt;unsignedが使えないとなると、フィールド内で扱えるバイト数が半分になってしまうので、あとで直さないといけない。面倒くさい。&lt;br /&gt;&lt;br /&gt;これは今後のschemaのバージョンアップに期待したいところ。&lt;br /&gt;&lt;br /&gt;※この問題はマイルストーンが&lt;a href="http://cakephp.lighthouseapp.com/projects/42648/tickets/2396-support-for-unsigned-integer-in-mysql"&gt;『いつか』扱い&lt;/a&gt;になっているようだ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■SQLファイルをダンプしてみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;実はcake schemaコマンドにはSQLダンプコマンドがある。&lt;br /&gt;phpMyAdminなどのGUIツールでダンプしたSQLファイルに比べると恐ろしくしょぼいが。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ ./cake schema --app /cakehp2.0/htdocs/app dump --write schema.sql&lt;br /&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;b&gt;cake schema -app &lt;span style="color: #999999;"&gt;＜appのパス＞&lt;/span&gt;&amp;nbsp;dump --write &lt;span style="color: #999999;"&gt;＜sqlファイル名＞&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;出力されたSQLファイルを見てみると、そのシンプルさに驚くと思う。&lt;br /&gt;&lt;pre class="sql" name="code"&gt;#App sql generated on: 2012-01-25 17:13:47 : 1327479227&lt;br /&gt;&lt;br /&gt;DROP TABLE IF EXISTS `profiles`;&lt;br /&gt;DROP TABLE IF EXISTS `users`;&lt;br /&gt;&lt;br /&gt;CREATE TABLE `profiles` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '',&lt;br /&gt;  `user_id` int(5) NOT NULL COMMENT '',&lt;br /&gt;  `image_url` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'アバター画像URL',&lt;br /&gt;  `created` datetime NOT NULL COMMENT '',&lt;br /&gt;  `modified` datetime NOT NULL COMMENT '', PRIMARY KEY  (`id`),&lt;br /&gt;  UNIQUE KEY `profile_idx` (`user_id`, `image_url`, `created`, `modified`)) DEFAULT CHARSET=utf8,&lt;br /&gt;  COLLATE=utf8_general_ci,&lt;br /&gt;  ENGINE=InnoDB;&lt;br /&gt;&lt;br /&gt;CREATE TABLE `users` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '',&lt;br /&gt;  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '',&lt;br /&gt;  `passwd` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '',&lt;br /&gt;  `nickname` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '',&lt;br /&gt;  `is_enabled` tinyint(1) NOT NULL COMMENT '',&lt;br /&gt;  `is_deleted` tinyint(1) NOT NULL COMMENT '',&lt;br /&gt;  `created` datetime NOT NULL COMMENT '',&lt;br /&gt;  `modefied` datetime NOT NULL COMMENT '', PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `username` (`username`, `passwd`, `nickname`, `is_enabled`, `is_deleted`, `created`, `modefied`)) DEFAULT CHARSET=utf8,&lt;br /&gt;  COLLATE=utf8_general_ci,&lt;br /&gt;  ENGINE=InnoDB;&lt;br /&gt;&lt;/pre&gt;コンソール上からmysqlコマンドでインポートさせるケースなんかはあるかもしれないけど、スキーマ定義ファイルで事足りるという。&lt;br /&gt;ただ、ダンプしてSQLファイルにしておくと、CakePHP以外でも使えるよね。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■構造のアップデート&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;cake schemaコマンドにはupdateというサブコマンドも用意されているんだけど、これが何度やってもうまく行かない。&lt;br /&gt;&lt;br /&gt;例えばschema.phpを開いて、profilesにwebsite_urlなど１つ足して保存したとする。&lt;br /&gt;この状態でupdateしたら、profilesテーブルにwebsite_urlフィールドがalter tableされて追加されるぞ！と期待していた。&lt;br /&gt;&lt;br /&gt;しかし実際にはすべてのフィールドをaddしてしまい『ユニークな主キーが重複しているからアップデートできないぜ(#ﾟДﾟ)ｺﾞﾙｧ!!』になる。&lt;br /&gt;&lt;br /&gt;英語のマニュアルを読んでみると、どうもupdateはロールバックするときに使うようで、基本、createでやるようだ。&lt;br /&gt;&lt;br /&gt;ただ、この部分正直いうとあまり自信がないので、より詳しい情報が入り次第、記事を更新しようと思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■まとめ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;正直schemaファイルを自作するとなると覚える個数がかなり多いが、たかだか程度の問題。&lt;br /&gt;複雑なロジックを知識として覚え、そこから知恵を捻出するような作業ではないので、単純に暗記でいいと思う。少なくとも俺は暗記しようと思う。&lt;br /&gt;&lt;br /&gt;1つを表現するための方法は複数あったほうが良いとおもうし、逆に1つの方法で複数を表現できるというのもあり。&lt;br /&gt;1つの方法で1つの表現しかできないのがコストパフォーマンスの低下を生むと思うんだよな。&lt;br /&gt;というわけで、今回はスキーマでした。&lt;br /&gt;&lt;br /&gt;次回はモデルとコントローラをやり、最後にPHPUnitを使ったテストを生成してみる予定。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-4465422097269133704?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4465422097269133704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4465422097269133704'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2012/01/cakephp2013.html' title='CakePHP2.0のコンソールを使ってラクラク自動生成しよう【1/3】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ZftNXJ49V_Y/Tx-eGushQeI/AAAAAAAAFtQ/XGwU3hAPD6U/s72-c/Screenshot-2012-01-25+14%253A49%253A30.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-7709726659964759023</id><published>2012-01-21T12:15:00.001+09:00</published><updated>2012-01-25T10:15:48.812+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='ページネータ'/><category scheme='http://www.blogger.com/atom/ns#' term='検索'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='CakeDC'/><category scheme='http://www.blogger.com/atom/ns#' term='ページャ'/><title type='text'>CakePHP2.0にSearch Pluginをいれてラクラク検索しよう【2/2】</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;■準備&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torhamzedd.blogspot.com/2012/01/cakephp20search-plugin22.html"&gt;前回の記事&lt;/a&gt;を見て同じようにやっておけば、そのままの続きで話を勧められるけど、一応まとめとして前回のおさらいをしておこう。&lt;br /&gt;&lt;br /&gt;まず、&lt;a href="http://cakephp.jp/"&gt;CakePHP2.0&lt;/a&gt;がブラウザで閲覧できる状態であり、エラーも無いとしよう。&lt;br /&gt;その状態でCakeDC謹製の検索プラグインである&lt;a href="https://github.com/CakeDC/Search"&gt;Searchプラグイン&lt;/a&gt;をインストールした。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ページャ機能を使う&lt;/li&gt;&lt;li&gt;検索結果もページャに反映させる&lt;/li&gt;&lt;/ol&gt;のが目的なので、まずは１の『ページャ機能を使う』を実装。&lt;br /&gt;今回は２の『検索結果もページャに反映させる』を行うよ。それで終わり。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■その前に&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;実はCakePHP1.3と2.0で変更があった部分が多く、その中で意外と気づかなかった部分を紹介するよ。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;$this-&amp;gt;Paginator-&amp;gt;sort()の引数指定が逆になってる&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;英語で良ければ&lt;a href="http://book.cakephp.org/2.0/en/core-libraries/helpers/paginator.html?highlight=paginator#PaginatorHelper::sort"&gt;ここに書いてある&lt;/a&gt;よ。&lt;br /&gt;&lt;br /&gt;つまり、1.3では&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;sort('ユーザID', 'User.id')&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;の順番だけど、2.0からは&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;b&gt;sort('User.id', 'ユーザID')&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;という順序になった。&lt;br /&gt;&lt;br /&gt;なんで気づきにくいかというと、2.0上で1.3方式そのままやってもエラーがでないから。&lt;br /&gt;ただ項目名にモデル名が表示されるだけ。&lt;br /&gt;&lt;br /&gt;当然『ユーザID』なんていうモデルデータは無いから、実際には動かないんだけどね。&lt;br /&gt;そこんとこ、ヨロシク！だ。&lt;br /&gt;&lt;br /&gt;ほかにも1.3系列で動かしていて『あれ？』と思ったら、英語でもいいのでCookbookを見ておくことをおすすめする。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://book.cakephp.org/2.0/en/search.html?q=Paginator&amp;amp;x=0&amp;amp;y=0&amp;amp;check_keywords=yes&amp;amp;area=default"&gt;Paginator関連&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;海外のマニュアルは英語なだけでなく、サンプルが極端に少ない場合が多いので、ある程度使い込んだ人じゃないと意味がわからない場合も多いけど、そのうち日本で&lt;b&gt;CakePHP2.0の本が出るはず&lt;/b&gt;なので、それまで待つのも手だね。&lt;br /&gt;&lt;br /&gt;というわけで、早速indexビューを変更しておこう。&lt;br /&gt;以下のような感じにして、項目名ソート機能を実装だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/View/Users/index.ctp&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php echo $this-&amp;gt;element('searchForm')?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php echo $this-&amp;gt;element('pager')?&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;sort('User.id', 'ID')?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;sort('User.username', 'ユーザ名')?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;sort('Profile.nickname', 'ニックネーム')?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;sort('User.created', '作成日')?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;sort('User.modified', '更新日')?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php foreach($users as $user):?&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['id']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['username']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['Profile']['nickname']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['created']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['modified']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php endforeach?&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;?php echo $this-&amp;gt;element('pager')?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;変更したのは6〜10行だ。&lt;br /&gt;&lt;br /&gt;1.3では&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;$paginator-&amp;gt;sort()&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;だったけど、2.0からはヘルパーは&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;b&gt;$this-&amp;gt;Paginator-&amp;gt;sort()&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;的な記述をすることになっているんで、ちゃんと規約通りに書くようにしようじゃないか。&lt;br /&gt;&lt;br /&gt;記述が長くなってしまうけど、これは気にしないのが精神衛生上よろしいと思われるんで、とりあえずやってから文句言えばいいと思う。&lt;br /&gt;だからやると良いよ。&lt;br /&gt;&lt;br /&gt;この状態でブラウザで見てみると、こんな感じになってるはずだ。&lt;br /&gt;なってなかったら、もう一度布団に入り、レム睡眠で6時間ほど眠り、起き直すと良いかも。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-8W8jc6H9EtA/Txo3RfanOfI/AAAAAAAAFp4/Ic9GszOT24Q/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://2.bp.blogspot.com/-8W8jc6H9EtA/Txo3RfanOfI/AAAAAAAAFp4/Ic9GszOT24Q/s320/Screenshot-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;項目名の『ID』『ユーザID』『ニックネーム』『作成日』『更新日』がテキストリンクになったはずだ。&lt;br /&gt;&lt;br /&gt;そしてクリックすると、クリックした項目を基準に昇順/降順に並び替えることができるんだ。&lt;br /&gt;&lt;br /&gt;URLを見れば一目瞭然。GET形式で向きを指定しているだけ。それを受け取って向きを変えてくれるのがPaginatorに備わっている、というわけよ。どうよ？&lt;br /&gt;&lt;br /&gt;なかなか憂い奴だべ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■Searchプラグインの準備&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、本題だ。&lt;br /&gt;&lt;br /&gt;Searchプラグインを使うためにはいろいろ準備がいる。そもそもプラグインのプラグというものは、いわゆる日本で言うところのコンセントだ。挿せば使える。挿さないと使えない。&lt;br /&gt;&lt;br /&gt;当然通常の電化製品ってのは、コンセント差した瞬間に使えるようなものは少ないわけで、何かしらのスイッチが必要になる。&lt;br /&gt;&lt;br /&gt;掃除機も、コンセントに差した瞬間に吸い込み始めたら厄介だ。&lt;br /&gt;&lt;br /&gt;というわけで、インストールしただけでは動かないようになっている。&lt;br /&gt;『プラグイン』って名前がついてるのに、インストールしただけじゃ動かないの？と言われれば、『そうだ』と答えるよ。&lt;br /&gt;&lt;br /&gt;でも&lt;b&gt;俺の答えなんかハナクソと同価&lt;/b&gt;なので、いちいち一喜一憂しないほうが世のため人のためだよ。&lt;br /&gt;&lt;br /&gt;というわけで、ダウンロードしたSearchプラグインを解凍し、フォルダ名を変更して、しかるべき場所に設置したことにより、コンセントは刺された状態となったのは言うまでもない。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;GithubでCake2.0用のSearchプラグインをダウンロード&lt;/li&gt;&lt;li&gt;ダウンロードしたファイルを解凍&lt;/li&gt;&lt;li&gt;解凍したフォルダをSearchにリネーム&lt;/li&gt;&lt;li&gt;app/Plugin内にSearchフォルダを設置&lt;/li&gt;&lt;/ol&gt;さて、次は電源を入れようじゃないか。&lt;br /&gt;どうやって入れるのか？&lt;br /&gt;&lt;br /&gt;CakePHPのプラグイン達は、家電で言えば冷蔵庫だ。一度電源を入れたら、かなりの間電源を消すことはない。まずこれを覚えておいて欲しい。&lt;br /&gt;&lt;br /&gt;次に、app/Configの中にある、bootstrap.phpを見てもらいたいんだ。&lt;br /&gt;テキストエディタやお好きなIDE、ないしは隣の奥さんに朗読してもらうのも良い。&lt;br /&gt;末尾の方に、こんな記述があるはずだ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Config/bootstrap.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;/**&lt;br /&gt; * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call&lt;br /&gt; * Uncomment one of the lines below, as you need. make sure you read the documentation on CakePlugin to use more&lt;br /&gt; * advanced ways of loading plugins&lt;br /&gt; *&lt;br /&gt; * CakePlugin::loadAll(); // Loads all plugins at once&lt;br /&gt; * CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;さて、これはつまりどういうこと？&lt;br /&gt;&lt;br /&gt;クソ翻訳してみると、&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;CakePHP2.0でプラグイン使うときは、このファイルに名指しでプラグインを指定するか、面倒くさいヤツはプラグイン全部よむ指定をかけや、な、ボウズ。&lt;/blockquote&gt;と書いてある。&lt;br /&gt;&lt;br /&gt;本当にそう書いてあるのかどうかはまるで保証しないけど、とにかく以下のように記述しないと、プラグインの電源は入らないことは必然だ！！&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;CakePlugin::load(＜プラグイン名＞);&lt;br /&gt;&lt;/pre&gt;というわけで、今回使うプラグインは『Search』という名前なので、&lt;br /&gt;&lt;pre class="php" name="code"&gt;CakePlugin::load('Search');&lt;br /&gt;&lt;/pre&gt;と記述するわけだ。&lt;br /&gt;&lt;br /&gt;プラグインはCamelCaseなので、大文字から始めよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■Searchプラグインを使ってみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、次は具体的にソースコードに記述しながら説明しようと思う。&lt;br /&gt;&lt;br /&gt;使うファイルは&lt;br /&gt;&lt;ul&gt;&lt;li&gt;app/Controller/UsersController.php&lt;/li&gt;&lt;li&gt;app/Model/User.php&lt;/li&gt;&lt;/ul&gt;だ。&lt;br /&gt;&lt;br /&gt;コントローラ側ではプラグインのコンポーネント、モデル側ではプラグインのビヘイビアの指定をそれぞれする。&lt;br /&gt;&lt;br /&gt;その他に、検索フォームのどの項目を、モデルのフィールドに合わせるのか、検索するタイプなども同時に指定することになる。&lt;br /&gt;&lt;br /&gt;言うなれば上記の2種類の指定をするだけで、誰でも簡単に検索結果を維持したままページネーションさせることができるんだ。&lt;br /&gt;&lt;br /&gt;というわけで、まずはモデルを先にやっつけることにする。&lt;br /&gt;モデルでは、ビュー（検索フォーム）から送られてくるデータをフィルタする必要があるらしく、そのフィルタの設定は&lt;span style="background-color: #f8f8f8; font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px; line-height: 14px;"&gt;&lt;b&gt;&lt;i&gt;$filterArgs&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;というメンバ変数ですることになっている。&lt;br /&gt;&lt;br /&gt;指定はそれほど難しくなく、検索フォームで使っているinputタグなどの、name属性を使い、それぞれ型と、ペアとなるモデルデータのフィールドを指定するだけだ。&lt;br /&gt;&lt;br /&gt;今回検索フォームには『ID』『ユーザID』『ニックネーム』の3つがあり、それぞれname属性は『id』『username』『nickname』となる。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;このname属性は実は何でもいい。『id』を『unko』、『username』を『chinco』、『nickname』を『namco』としても問題ない。それらname属性に対して、実際のモデルデータでどこのフィールをペアにするのかが指定できるからね。&lt;/blockquote&gt;&lt;br /&gt;というわけで、早速$filterArgsを設定してみよう。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 14px; line-height: 13px;"&gt;name『id』はfield『User.id』&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 14px; line-height: 13px;"&gt;name『username』はfield『User.username』&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 14px; line-height: 13px;"&gt;name『nickname』はfield『Profile.nickname』&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;という指定をするよ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Model/User.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;// 検索対象のフィルタ設定&lt;br /&gt;  public $filterArgs = array(&lt;br /&gt;    array('name' =&amp;gt; 'id', 'type' =&amp;gt; 'value', 'field' =&amp;gt; 'User.id'),&lt;br /&gt;    array('name' =&amp;gt; 'username', 'type' =&amp;gt; 'like', 'field' =&amp;gt; 'User.username'),&lt;br /&gt;    array('name' =&amp;gt; 'nickname', 'type' =&amp;gt; 'like', 'field' =&amp;gt; 'Profile.nickname'),&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これを一番下に追記しておく。&lt;br /&gt;&lt;br /&gt;typeに入れる『value』とか『like』ってなに？と思うかもしれないが、思った方が健全だ。&lt;br /&gt;これは、例えば検索フォームに入力されたキーワードを部分一致させたい場合は『like』を、IDなどの数字を完全一致で検索したい場合は『value』を指定、というようなニュアンスを掴んでもらいたい。&lt;br /&gt;&lt;br /&gt;当然これら2つだけじゃなく、他にも『query』『subquery』なんかの型も用意されている。&lt;br /&gt;詳しくは、Searchプラグインに同梱されている、readme.mdを見ていただきたい。&lt;br /&gt;mdフィルってのはマークダウン方式で記述された、ただのテキストファイルなので、お好きなテキストエディタで開くと良いよ。&lt;br /&gt;&lt;br /&gt;開けなかったら、もう一度Githubに言って、readme.mdファイルを選択すれば、整形済みのmdファイルの中身を閲覧できるよ。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/CakeDC/search/blob/master/readme.md"&gt;readme.md&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;というわけで、これで検索フォームから投稿された検索データがモデルで扱えるようになった。&lt;br /&gt;&lt;br /&gt;次はこれらのデータをコントローラでも扱わなければいけない。&lt;br /&gt;その際Searchプラグインの作法として、コントローラ側で使うプリセットというものを設定しておかないといけない。&lt;br /&gt;&lt;br /&gt;これは少々面倒だ。&lt;br /&gt;&lt;br /&gt;検索内容を変更するとき、いちいちUser.phpとUsersController.phpを編集するのは厄介。&lt;br /&gt;コントローラ側でモデルの配列を引っ張ってきて、その場で代入すればいいじゃん、と俺は思ってる。&lt;br /&gt;&lt;br /&gt;だからマニュアルにはコントローラにかけと書いてある&lt;b&gt;&lt;i&gt;$presetVars&lt;/i&gt;&lt;/b&gt;を、モデルファイルに書いてしまうと思う。&lt;br /&gt;&lt;br /&gt;というわけで、引き続きモデルファイルの末尾に以下を追記しよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Model/User.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;// 検索対象のフィールド設定&lt;br /&gt;  public $presetVars = array(&lt;br /&gt;    array('field' =&amp;gt; 'id', 'type' =&amp;gt; 'value'),&lt;br /&gt;    array('field' =&amp;gt; 'username', 'type' =&amp;gt; 'value'),&lt;br /&gt;    array('field' =&amp;gt; 'nickname', 'type' =&amp;gt; 'value'),&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;さて、このPresetVarsの指定、fieldとtypeってあるけど、さっきのfilterArgsと何が違うの？と思うかもしれない。&lt;br /&gt;&lt;br /&gt;俺もそう思った。&lt;br /&gt;&lt;br /&gt;とりあえず説明すると、fieldはモデルデータのフィールド名。つまりUserモデルのidフィールドなら、idと書けばいいし、typeは例えば複数選択ならcheckboxと書いたり、lookupなんていう凝った指定もできる。&lt;br /&gt;&lt;br /&gt;まだ解析してないのでなんとも言えないけどこの$presetVarsは、検索結果用のURLを生成するためのロジックへ渡すための処理なんだと思ってる。それをSearch.Prgというコンポーネントで行なっている（と思う）。&lt;br /&gt;&lt;br /&gt;で、本来コントローラに書くデータをモデルにまとめたので、コントローラ側では一旦この$presetVarsを読み出す処理がひつようになるよね。&lt;br /&gt;&lt;br /&gt;というわけで、コントローラをいじろう。&lt;br /&gt;まずはSearch.Prgコンポーネントの指定、それからモデルで記述した$presetvarsの代入だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Controller/UsersController.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;public $name = 'Users';&lt;br /&gt;  public $uses = array('User', 'Profile');&lt;br /&gt;  public $components = array('Search.Prg');&lt;br /&gt;  public $presetVars = array();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;$conponentsにSearch.Prgの指定、それと$presetVarsの初期化だ。&lt;br /&gt;次に、モデルに記述した$presetVarsを、この初期化したコントローラ側の$presetVarsに代入するため、beforeFilter内に代入式を書いておくようにする。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Controller/UsersController.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;public function beforeFilter()&lt;br /&gt;  {&lt;br /&gt;    // 検索対象のフィールド設定代入&lt;br /&gt;    $this-&amp;gt;presetVars = $this-&amp;gt;User-&amp;gt;presetVars;&lt;br /&gt;   &lt;br /&gt;    // ページャ設定&lt;br /&gt;    $pager_numbers = array(&lt;br /&gt;      'before' =&amp;gt; ' - ',&lt;br /&gt;      'after'=&amp;gt;' - ',&lt;br /&gt;      'modulus'=&amp;gt; 10,&lt;br /&gt;      'separator'=&amp;gt; ' ',&lt;br /&gt;      'class'=&amp;gt;'pagenumbers'&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('pager_numbers', $pager_numbers);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;３〜４行目を追記だ。&lt;br /&gt;&lt;br /&gt;これでSearchプラグインの準備は万端。&lt;br /&gt;次にページネーションされたURLと、検索されたURLをくっつける処理が必要になる。&lt;br /&gt;&lt;br /&gt;ページネーションはindexアクションで行ってるので、ここを少し修正してみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Controller/UsersController.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;// 検索条件設定&lt;br /&gt;  $this-&amp;gt;Prg-&amp;gt;commonProcess();&lt;br /&gt;  // 検索条件取得&lt;br /&gt;  $conditions = $this-&amp;gt;User-&amp;gt;parseCriteria($this-&amp;gt;passedArgs);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;検索条件設定でURLを生成。検索条件取得で検索条件を設定。&lt;br /&gt;それをページネータに絡ませるには、上記の記述も含めて、以下のようにすればOK。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/Controller/UserController.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;public function index()&lt;br /&gt;  {&lt;br /&gt;    // 検索条件設定&lt;br /&gt;    $this-&amp;gt;Prg-&amp;gt;commonProcess();&lt;br /&gt;    // 検索条件取得&lt;br /&gt;    $conditions = $this-&amp;gt;User-&amp;gt;parseCriteria($this-&amp;gt;passedArgs);&lt;br /&gt;&lt;br /&gt;    $this-&amp;gt;paginate = array(&lt;br /&gt;      'conditions' =&amp;gt; $conditions,&lt;br /&gt;      'limit' =&amp;gt; 3,&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;paginate('User'));&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで完成だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■検索してみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、検索フォームの『ユーザID』に『com』と入れて検索してみよう。&lt;br /&gt;メールアドレスにcomが付くユーザは結構いるので、数名ヒットするだろうね。&lt;br /&gt;&lt;br /&gt;そして１ページ３件にしているので、ページネーションもちゃんとジャンプメニューが表示されている状態だ。なにげないね。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4iwxRghiB4o/TxpJpG4SOSI/AAAAAAAAFqE/-bxtdX9x4zw/s1600/Screenshot-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://3.bp.blogspot.com/-4iwxRghiB4o/TxpJpG4SOSI/AAAAAAAAFqE/-bxtdX9x4zw/s320/Screenshot-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この状態でページネーターのジャンプリンクをクリックした場合、もしSearchプラグインが入ってなかったら、検索した『com』は無視され、ただ無検索状態で指定したページが表示されるはずだ。&lt;br /&gt;&lt;br /&gt;しかし今回Searchプラグインで『検索結果もページャーに反映させる』を行ったので、期待する通り、検索結果を考慮したURLが生成されるはず。&lt;br /&gt;&lt;br /&gt;というわけで、まず『com』を検索してみただけの時のURLは以下のようになった。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;/users/index/id:/&lt;span style="color: red;"&gt;username:com&lt;/span&gt;/nickname:&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;ユーザIDにcom、つまり『username:com』ってことなのは一目瞭然だと思う。&lt;br /&gt;&lt;br /&gt;そして次は、２ページ目のジャンプリンクをクリックしてみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5J4_nkuAOYA/TxpKVDNODZI/AAAAAAAAFqM/DqpYBSnlHCw/s1600/Screenshot-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://1.bp.blogspot.com/-5J4_nkuAOYA/TxpKVDNODZI/AAAAAAAAFqM/DqpYBSnlHCw/s320/Screenshot-3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正しく検索キーワードもそのまま残り、ページ遷移も問題無いことがわかった。&lt;br /&gt;この時のURLは、&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;/users/index/id:/username:com/nickname:&lt;span style="color: red;"&gt;/page:2&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;だ。２ページ目のジャンプリンクをクリックした時の、page:2が追加されているよ。&lt;br /&gt;これならもう、どんなキーワードだって検索できちゃうこと請け合いなしだね。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■終わり&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;プラグインってすごく便利。これからじゃんじゃん使っていこうと思うんで、まずはどんなプラグインが存在するのかをまとめておくとかすると良いかもね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-7709726659964759023?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/7709726659964759023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/7709726659964759023'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2012/01/cakephp20search-plugin2.html' title='CakePHP2.0にSearch Pluginをいれてラクラク検索しよう【2/2】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-8W8jc6H9EtA/Txo3RfanOfI/AAAAAAAAFp4/Ic9GszOT24Q/s72-c/Screenshot-1.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6394848747923201952</id><published>2012-01-20T17:51:00.000+09:00</published><updated>2012-01-21T12:12:53.364+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='ページネータ'/><category scheme='http://www.blogger.com/atom/ns#' term='検索'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='CakeDC'/><category scheme='http://www.blogger.com/atom/ns#' term='ページャ'/><title type='text'>CakePHP2.0にSearch Pluginをいれてラクラク検索しよう【1/2】</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;■CakePHPの2.0ってところがミソ&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;昨年は『CakePHP1.3にSearch Pluginをいれてラクラク検索しよう』という記事を、２回にわけてお伝えしたんだけど、まぁ別にいちいち見なおさないで良いよ。&lt;br /&gt;&lt;br /&gt;でもリンク貼っとくから、気になって眠れない人や、全国の俺ファンの女子高生は、ここからすすむことができるんだ。夜も安心。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/11/cakephp13search-plugin12.html"&gt;CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【1/2】&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/11/cakephp13search-plugin22.html"&gt;CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【2/2】&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;あくまで個人的な感覚でしか無いけど、俺的には、もはや時代は2.0っぽさが満開だと思うわけよ。こら。&lt;br /&gt;&lt;br /&gt;とは言っても決してWeb2.0ではない。Webなんかどんなバージョニングしているのか謎すぎて、屁で空飛べるくらいどうでもいい。&lt;br /&gt;&lt;br /&gt;何が2.0かというと、タイトル見ればいーじゃん！&lt;br /&gt;そう、俺達の大好きな、あのCakePHPの2.0だよ！ブタ野郎！！！&lt;br /&gt;&lt;br /&gt;というわけで、最近CakePHP2.0ばっかりいじっている俺が、つい最近まで書いていたCakePHP1.3の記事を、CakePHP2.0でやってみようって話。その１回目。よかったね。&lt;br /&gt;&lt;br /&gt;使ってるバージョンはCakePHP2.0.5。このバージョンで、CakeDCのSearchプラグインを使おうぜって話だ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;早速行ってみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■CakePHPをデプロイしておく&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;動くようにしておいていただきたい。&lt;br /&gt;ブラウザで見れればいいって意味で。&lt;br /&gt;&lt;br /&gt;CakePHP2.0はここから落とせるよ。&lt;br /&gt;俺が落としたバージョンは2.0.5だ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cakephp.jp/"&gt;http://cakephp.jp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■Searchプラグインをインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まずはダウンロードだ。&lt;br /&gt;ダウンロード元はこちらのGithub。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/CakeDC/Search"&gt;https://github.com/CakeDC/Search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;前回もGithubだったから、前回試してみた人は安心してダウンロードすることができるけど、たかだかダウンロードで安心もクソもねぇでやんす。&lt;br /&gt;&lt;br /&gt;とっとと落とすと良いよ。&lt;br /&gt;&lt;br /&gt;でも１個だけ注意が必要かもね。&lt;br /&gt;ページの右側にこんなのがある。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-J_ui7YwrlRo/TxkQW55KoCI/AAAAAAAAFnc/Xg9Js2wqnb8/s1600/Screenshot-2012-01-20+15%253A56%253A48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-J_ui7YwrlRo/TxkQW55KoCI/AAAAAAAAFnc/Xg9Js2wqnb8/s1600/Screenshot-2012-01-20+15%253A56%253A48.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ここが2.0になってないと、もしかしたら君は1.3用のSearchプラグインを落としてしまうかもしれないんだ。&lt;br /&gt;&lt;br /&gt;だからこんな感じに変えておくと、寝覚め良いよ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-fyrKqcdCMBc/TxkQddklt6I/AAAAAAAAFnk/wyLvxPpedz4/s1600/Screenshot-2012-01-20+15%253A57%253A03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-fyrKqcdCMBc/TxkQddklt6I/AAAAAAAAFnk/wyLvxPpedz4/s1600/Screenshot-2012-01-20+15%253A57%253A03.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そもそもバージョンは2.0で説明しているのに、使ってるプラグインのバージョンが1.3だから動かないとか、エラーがでるとか、そんな話は里のおふくろにでもメールして、返事が来るまで風呂にでも入ってろといいたいけど、俺も&lt;b&gt;うっかりさんの代表&lt;/b&gt;みたいなもんだし、よくやるパターンなので、このように親切に書いておいたから、迂闊でやんちゃな君でももう大丈夫だよね。&lt;br /&gt;&lt;br /&gt;2.0はいろいろなフォルダが&lt;b&gt;大文字から始まるCamelCase&lt;/b&gt;になっているので、以下のような大文字から始まるフォルダの階層構造になっていればもう、大丈夫。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-sM-l7jcWfp4/TxkQpOiRPmI/AAAAAAAAFns/fxCJ1Bed_VI/s1600/Screenshot-2012-01-20+15%253A57%253A16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="http://2.bp.blogspot.com/-sM-l7jcWfp4/TxkQpOiRPmI/AAAAAAAAFns/fxCJ1Bed_VI/s320/Screenshot-2012-01-20+15%253A57%253A16.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;当然、『Current branch』がmasterなのに、ちゃんとフォルダが大文字から始まっていたなら、それはそれで素直にダウンロードすればいいと思うよ。&lt;br /&gt;&lt;br /&gt;今回はこんなファイル名でダウンロードできた。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;CakeDC-search-1.1-20-g98da0a6.zip&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ダウンロードしたzipファイルは解凍しよう。&lt;br /&gt;別に解凍しなくてもいいよ。先に進まないだけだから。&lt;br /&gt;&lt;br /&gt;解凍したら、今回はこんな感じになっていた。&lt;br /&gt;&lt;pre&gt;.&lt;br /&gt;├── Controller&lt;br /&gt;│&amp;nbsp;&amp;nbsp; └── Component&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     └── PrgComponent.php&lt;br /&gt;├── Locale&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── deu&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── LC_MESSAGES&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── search.po&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── fre&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── LC_MESSAGES&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── search.po&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── por&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── LC_MESSAGES&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── search.po&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── rus&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── LC_MESSAGES&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── search.po&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── search.pot&lt;br /&gt;│&amp;nbsp;&amp;nbsp; └── spa&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     └── LC_MESSAGES&lt;br /&gt;│&amp;nbsp;&amp;nbsp;         └── search.po&lt;br /&gt;├── Model&lt;br /&gt;│&amp;nbsp;&amp;nbsp; └── Behavior&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     └── SearchableBehavior.php&lt;br /&gt;├── Test&lt;br /&gt;│&amp;nbsp;&amp;nbsp; ├── Case&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; ├── AllSearchPluginTest.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; ├── Controller&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── Component&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── PrgComponentTest.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── Model&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;     └── Behavior&lt;br /&gt;│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;         └── SearchableBehaviorTest.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp; └── Fixture&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     ├── ArticleFixture.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     ├── PostFixture.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     ├── TagFixture.php&lt;br /&gt;│&amp;nbsp;&amp;nbsp;     └── TaggedFixture.php&lt;br /&gt;├── license.txt&lt;br /&gt;└── readme.md&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;いちいち中身は全部調べないで良いとはおもうけど、前回書いておいたから今回も書いてみた。ただtreeコマンド使いたかっただけという話もある。&lt;br /&gt;&lt;br /&gt;ではインストールしよう。&lt;br /&gt;&lt;br /&gt;フォルダ名を『CakeDC-search-98da0a6』から『Search』に変更し、CakePHPの『app/Plugin』の中にフォルダごと入れる。インストールはこれで完了だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■モデルをつくろう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;今回も、UserモデルとProfileモデルで、モデルをまたいだ検索をページネーションで再現してみようと思う。&lt;br /&gt;&lt;br /&gt;要するに、検索結果を維持したままページネーションでページをジャンプするということだ。&lt;br /&gt;1.3と2.0では結構違うので、そこんとこよろしく。&lt;br /&gt;&lt;br /&gt;まずはモデルだが、以下の構造でテーブルを作っておくと良い。&lt;br /&gt;&lt;pre class="sql" name="code"&gt;CREATE TABLE IF NOT EXISTS `profiles` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `user_id` int(5) NOT NULL,&lt;br /&gt;  `nickname` varchar(32) NOT NULL,&lt;br /&gt;  `gender` tinyint(1) NOT NULL,&lt;br /&gt;  `birthday` date NOT NULL,&lt;br /&gt;  `created` datetime NOT NULL,&lt;br /&gt;  `modified` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `user_id` (`user_id`,`nickname`,`gender`,`birthday`),&lt;br /&gt;  KEY `modified` (`modified`)&lt;br /&gt;) ENGINE=InnoDB  DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `users` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `username` varchar(64) NOT NULL,&lt;br /&gt;  `password` varchar(64) NOT NULL,&lt;br /&gt;  `created` datetime NOT NULL,&lt;br /&gt;  `modified` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `username` (`username`,`password`)&lt;br /&gt;) ENGINE=InnoDB  DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;データは以下のSQLを使うと楽だよ。&lt;br /&gt;&lt;pre class="sql" name="code"&gt;INSERT INTO `profiles` (`id`, `user_id`, `nickname`, `gender`, `birthday`, `created`, `modified`) VALUES&lt;br /&gt;(1, 1, 'マッキー太郎', 1, '1990-10-01', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(2, 2, '倍アグラン', 1, '1980-05-04', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(3, 3, 'エキサイト多恵子', 2, '1992-12-08', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(4, 4, '史彦パインステート', 1, '1965-11-24', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(5, 5, 'Yas-Kaz', 1, '1984-09-21', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(6, 6, 'ウッキー氏田', 2, '1999-08-08', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(7, 7, 'リック', 2, '1996-03-30', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(8, 8, 'puripuri-chan', 2, '1984-12-15', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(9, 9, 'チョーサンピル', 1, '1989-05-14', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(10, 10, '道端御三郎', 1, '1963-01-24', '2011-11-03 18:44:32', '2011-11-03 18:44:32');&lt;br /&gt;&lt;br /&gt;INSERT INTO `users` (`id`, `username`, `password`, `created`, `modified`) VALUES&lt;br /&gt;(1, 'taroh@asdf.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(2, 'jiro@qwer.net', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(3, 'yamada.haruko@example.co.jp', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(4, 'jimmy@ledzeppelin.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(5, 'james@metallica.co.jp', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(6, 'saburo@zcxv.tv', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(7, 'sonofabitch@fxxkyou.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(8, 'youaremydestiny@not.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(9, 'titty.twister@fromdusktilldown.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(10, 'myfriends@was.gone.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;データベースにテーブルを作ったら、今度はモデルファイルだ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/Model/User.php&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;class User extends AppModel {&lt;br /&gt;  public $name = 'User';&lt;br /&gt;&lt;br /&gt;  // 検索プラグイン&lt;br /&gt;  public $actsAs = array('Search.Searchable');&lt;br /&gt;&lt;br /&gt;  // アソシエーション&lt;br /&gt;  public $hasOne = array(&lt;br /&gt;    'Profile' =&amp;gt; array(&lt;br /&gt;      'className'  =&amp;gt; 'Profile',&lt;br /&gt;      'foreignKey' =&amp;gt; 'user_id',&lt;br /&gt;      'conditions' =&amp;gt; null,&lt;br /&gt;      'fields'     =&amp;gt; null,&lt;br /&gt;      'dependent'  =&amp;gt; true,&lt;br /&gt;    ),&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;今回使うプラグインを、actsAsプロパティにセットしておく。&lt;br /&gt;アソシエーションはUserに対して１つのProfileを持たせるので、hasOneとしておいた。&lt;br /&gt;ここで躓く人はいないと思うので、次に行くよ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■コントローラをつくろう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次はコントローラだ。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Eiu7IUCueZ4/TxkY1s_1AMI/AAAAAAAAFoA/IvnBzyIx_us/s1600/20090630_03_000.jpg"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-Eiu7IUCueZ4/TxkY1s_1AMI/AAAAAAAAFoA/IvnBzyIx_us/s200/20090630_03_000.jpg" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-tNmJAQv2vrg/TxkYy49AajI/AAAAAAAAFn4/Y3RT8GayQ8g/s1600/rola.jpg"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-tNmJAQv2vrg/TxkYy49AajI/AAAAAAAAFn4/Y3RT8GayQ8g/s200/rola.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/Controller/UsersController.php&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;class UsersController extends AppController {&lt;br /&gt;&lt;br /&gt;  public $name = 'Users';&lt;br /&gt;  public $uses = array('User', 'Profile');&lt;br /&gt;  &lt;br /&gt;  public function index()&lt;br /&gt;  {&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;User-&amp;gt;find('all'));&lt;br /&gt;  }  &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ファイル名に気をつけるんだ。2.0からは、クラス定義されたファイルのファイル名は大文字から指定するというルールになっている。&lt;br /&gt;&lt;br /&gt;オブジェクト指向っぽいかんじでウハウハだよね。&lt;br /&gt;ウハウハしない人は、嘘でもいいからウハウハしておくと、このあとも引き続き愉快な気分を満喫できるのでおすすめだ。&lt;br /&gt;&lt;br /&gt;そしてこのコントローラは短いから、特に説明はいらないかな。&lt;br /&gt;いらないね。だからしない。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■ビューをつくろう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ビューも意外に簡単に作っておく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/Views/Users/index.ctp&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="PHP" name="code"&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;ユーザID&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;ニックネーム&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;作成日&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;更新日&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php foreach($users as $user):?&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['id']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['username']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['Profile']['nickname']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['created']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php echo $user['User']['modified']?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php endforeach?&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;1.3と違うところがある。2.0ではechoのエイリアスであるe()が使えなくなった。なので、いちいちechoしている。気をつけろ！！&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■ブラウザで見てみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;上記設定をし終わったあと、ブラウザで閲覧んすると、こんなふうになったはずだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-he33VX36ivI/Txko_fUJaCI/AAAAAAAAFow/48WFlRsPI94/s1600/Screenshot-2012-01-20+17%253A42%253A13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://1.bp.blogspot.com/-he33VX36ivI/Txko_fUJaCI/AAAAAAAAFow/48WFlRsPI94/s320/Screenshot-2012-01-20+17%253A42%253A13.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;なんの変哲もない普通のインデックス。一覧ページ。リスト。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■検索フォームをつけよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次にこの一覧の上に、検索フォームをつけてみよう。&lt;br /&gt;検索フォームはエレメントで作っておいて、それをindex.ctpで読み込む形にしておく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/View/Elements/searchForm.ctp&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;create('User', array('url' =&amp;gt; '/users/index'))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;fieldset&amp;gt;&lt;br /&gt;  &amp;lt;legend&amp;gt;Search or Die!&amp;lt;/legend&amp;gt;&lt;br /&gt;  &amp;lt;dl&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ユーザID&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;input('id', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ユーザ名&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;input('username', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false ))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ニックネーム&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;input('nickname', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false ))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;  &amp;lt;/dl&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;submit('検索', array('div' =&amp;gt; false, 'escape' =&amp;gt; false))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/fieldset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php echo $this-&amp;gt;Form-&amp;gt;end()?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これを読み込むために、index.ctpも若干変更を加えよう。&lt;br /&gt;tableタグの上に以下を追記だ。&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php echo $this-&amp;gt;element('searchForm')?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで画面はこんなふうになったはずだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RKopWu59jNY/Txkp3wkuvXI/AAAAAAAAFpI/12rsX-944dE/s1600/Screenshot-2012-01-20+17%253A46%253A10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="http://3.bp.blogspot.com/-RKopWu59jNY/Txkp3wkuvXI/AAAAAAAAFpI/12rsX-944dE/s320/Screenshot-2012-01-20+17%253A46%253A10.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;ようやくここまでたどり着いた。&lt;br /&gt;この状態で、&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ページャ機能を使う&lt;/li&gt;&lt;li&gt;検索結果もページャに反映&lt;/li&gt;&lt;/ol&gt;ということがやりたいわけだ。&lt;br /&gt;この2の部分を、Searchプラグインで気軽にやっちまおうぜ、というのがこの記事の趣旨。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■ページャをつけよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まずはページャだ。&lt;br /&gt;今回データが10件しか入ってないので、１ページ20件表示のデフォルト設定だと、検索結果がかならず１ページで完結してしまう。&lt;br /&gt;１ページ３件表示にすれば、少なくとも３~４ページは稼げるので、上記１と２の連携もテストしやすいというもの。&lt;br /&gt;&lt;br /&gt;それからジャンプリンクの設定をプリフィルタでやっておきたいので、beforeFilterメソッドを作成し、その中にpager_numbersというビュー変数を使える設定をしておこう。&lt;br /&gt;&lt;br /&gt;というわけで、まずはコントローラにページャの設定を書いておこう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/Controller/UserController.php&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;  public function beforeFilter()&lt;br /&gt;  {&lt;br /&gt;    // ページャ設定&lt;br /&gt;    $pager_numbers = array(&lt;br /&gt;      'before' =&amp;gt; ' - ',&lt;br /&gt;      'after'=&amp;gt;' - ',&lt;br /&gt;      'modulus'=&amp;gt; 10,&lt;br /&gt;      'separator'=&amp;gt; ' ',&lt;br /&gt;      'class'=&amp;gt;'pagenumbers'&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('pager_numbers', $pager_numbers);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function index()&lt;br /&gt;  {&lt;br /&gt;    $this-&amp;gt;paginate = array(&lt;br /&gt;      'limit' =&amp;gt; 3&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;paginate('User'));&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;indexアクションの中身をページャに変更させ、limitに３を指定してみた。&lt;br /&gt;これで１ページ３件までとなるわけだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rOY3-Y5gWLM/TxkqCI0EvUI/AAAAAAAAFpQ/M1mvGcP6sCI/s1600/Screenshot-2012-01-20+17%253A46%253A48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://1.bp.blogspot.com/-rOY3-Y5gWLM/TxkqCI0EvUI/AAAAAAAAFpQ/M1mvGcP6sCI/s320/Screenshot-2012-01-20+17%253A46%253A48.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;３件にはなったけど、ジャンプリンクがないからページ移動ができんばい！&lt;br /&gt;となるので、ページャも作ってしまおう。&lt;br /&gt;&lt;br /&gt;ページャは一覧の上下に付けたいから、同じ内容を二箇所に書くのはよろしく無いので、こちらもエレメントとして作っておくことにする。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/View/Elements/pager.ctp&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;div class="pagers"&amp;gt;&lt;br /&gt;  &amp;lt;?php echo ($this-&amp;gt;Paginator-&amp;gt;hasPrev())?$this-&amp;gt;Paginator-&amp;gt;first('&amp;amp;laquo;', array('class'=&amp;gt;'first', 'escape'=&amp;gt;false)):'&amp;lt;span class="disabled"&amp;gt;&amp;amp;laquo;&amp;lt;/span&amp;gt;'?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;prev('&amp;amp;lsaquo;', array('escape' =&amp;gt; false), null, array('class'=&amp;gt;'disabled', 'tag' =&amp;gt; 'span', 'escape' =&amp;gt; false));?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;numbers($pager_numbers);?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $this-&amp;gt;Paginator-&amp;gt;next('&amp;amp;rsaquo;', array('escape' =&amp;gt; false), null, array('class' =&amp;gt; 'disabled', 'tag' =&amp;gt; 'span', 'escape' =&amp;gt; false));?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo ($this-&amp;gt;Paginator-&amp;gt;hasNext())?$this-&amp;gt;Paginator-&amp;gt;last('&amp;amp;raquo;', array('class'=&amp;gt;'last','escape'=&amp;gt;false)):'&amp;lt;span class="disabled"&amp;gt;&amp;amp;raquo;&amp;lt;/span&amp;gt;'?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なんどか試しては見たんだけど、$Paginator-&amp;gt;first()、$Paginator-&amp;gt;last()は、ない場合nullになってしまうのは1.3から変わってないようだ。これは残念。&lt;br /&gt;&lt;br /&gt;したがって、$Paginator-&amp;gt;hasPrev()、$Paginator-&amp;gt;hasNext()で判定させている状態。&lt;br /&gt;&lt;br /&gt;さて、このページャをindex.ctpから読み込ませるので、tableタグの上下に以下を追記しておく。&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php echo $this-&amp;gt;element('pager')?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;このままだと非常に汚いページャになってしまうので、CSSを少々いじってみよう。&lt;br /&gt;最後の行に以下を追記すればOK。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;app/webroot/css/cake.generic.css&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre class="css" name="code"&gt;.pagers {&lt;br /&gt;  text-align:center;&lt;br /&gt;  font-size:large;&lt;br /&gt;}&lt;br /&gt;.pagers a,&lt;br /&gt;.pagers span {&lt;br /&gt;  padding:0 0.2em;&lt;br /&gt;}&lt;br /&gt;.pagers .disabled {&lt;br /&gt;  color:#ccc;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;さて、ブラウザ見てみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rhgXHSpAyjQ/TxkqMoF10LI/AAAAAAAAFpY/u7cSldV0f0U/s1600/Screenshot-2012-01-20+17%253A47%253A35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://1.bp.blogspot.com/-rhgXHSpAyjQ/TxkqMoF10LI/AAAAAAAAFpY/u7cSldV0f0U/s320/Screenshot-2012-01-20+17%253A47%253A35.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;■次回のまとめ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;今回で&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ページャ機能を使う&lt;/li&gt;&lt;/ul&gt;はクリアできた。&lt;br /&gt;&lt;br /&gt;次回は&lt;br /&gt;&lt;ul&gt;&lt;li&gt;検索結果もページャに反映&lt;/li&gt;&lt;/ul&gt;部分をやる予定。&lt;br /&gt;&lt;br /&gt;つまりSearchプラグインの具体的な使い方ってことだね。&lt;br /&gt;ではお楽しみに。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6394848747923201952?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6394848747923201952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6394848747923201952'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2012/01/cakephp20search-plugin22.html' title='CakePHP2.0にSearch Pluginをいれてラクラク検索しよう【1/2】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-J_ui7YwrlRo/TxkQW55KoCI/AAAAAAAAFnc/Xg9Js2wqnb8/s72-c/Screenshot-2012-01-20+15%253A56%253A48.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-7111435695520329527</id><published>2012-01-11T12:28:00.000+09:00</published><updated>2012-01-13T11:11:58.446+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='logrotate'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='syslog'/><category scheme='http://www.blogger.com/atom/ns#' term='ソードM5'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='バックアップ'/><category scheme='http://www.blogger.com/atom/ns#' term='ぴゅう太'/><category scheme='http://www.blogger.com/atom/ns#' term='rsyslog'/><title type='text'>簡単なシェルスクリプトで色々バックアップしてみよう</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;■特定の場所にあるファイルやフォルダを別の場所で世代別に同期する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;例えばユーザがアップロードした画像などをファイルで保存している場合や、チャットのログをテキストファイルで管理しているような、ファイルベースのモデルだけど、それらのファイルをまるごと世代管理を意識したバックアップを取ってみたくなる衝動に駆られるっつーわけよ、少なくとも俺は。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;というわけで、bashで簡単なバッチを作ってみたんで晒すよ。&lt;/div&gt;&lt;div&gt;rootで動かすのが前提なんで、結構単純明快。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;あなたが必要になるパラメータは&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;世代数&lt;/li&gt;&lt;li&gt;バックアップ先の所有者&lt;/li&gt;&lt;li&gt;バックアップ元&lt;/li&gt;&lt;li&gt;バックアップ先&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;の4つだ。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;それぞれをスクリプト内に直接記述し、cronでroot権限で動かせばOK。&lt;/div&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1592660.js?file=backup_file.sh"&gt;&lt;/script&gt;&lt;br /&gt;ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。&lt;br /&gt;&lt;br /&gt;けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;■特定の場所にあるログファイルを毎月末に圧縮して別の場所に保存する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Apacheとかのログファイルが肥大化すると厄介なんだよ。&lt;br /&gt;&lt;br /&gt;特にCentOSとか使ってると、しょぼしょぼヘタレなsyslogちゃんとか、ログを切り詰めてくれるlogrotateちゃんとか、Apacheと一緒に仲良く落ちてくれる。&lt;br /&gt;&lt;br /&gt;そういう意味では今や標準となってるrsyslogくらい入れておけと大きな（そしてドスの効いた）声で言いたいんだけど、どうでもいいよ。シェル作ったから。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;というわけで、bashで簡単なバッチを作ってみたんで晒すよ。&lt;/div&gt;&lt;div&gt;rootで動かすのが前提なんで、結構単純明快。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;あなたが必要になるパラメータは&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;バックアップ先の所有者&lt;/li&gt;&lt;li&gt;バックアップ元&lt;/li&gt;&lt;li&gt;バックアップ先&lt;/li&gt;&lt;li&gt;対象となるログファイル群&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;の4つだ。ログファイルは配列なので複数指定できるよ。便利っぽいけど、中途半端な実装になってるから気をつけるんだ。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1592675.js?file=backup_log.sh"&gt;&lt;/script&gt;&lt;br /&gt;ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。&lt;br /&gt;&lt;br /&gt;けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。&lt;br /&gt;&lt;br /&gt;ちなみにcronで月末って指定するには、こんな感じでいいと思うよ&lt;br /&gt;&lt;br /&gt;&lt;pre class="c" name="code"&gt;59 23 28-31 * * /usr/bin/test `date -d tomorrow +\%d` -eq 1 &amp;amp;&amp;amp; /home/buser/backup_log.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;今日が28〜31日で且つ、明日が1日の場合、23時59分になったら『/home/buser/backup_log.sh』を実行するよ。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;■MySQLの特定のデータベースをまるごと別の場所で世代別にダンプする&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;激しくCRUDするタイプのWebアプリでもない限り、データベースのバックアップなんか、肩の力を抜いてゆとりを持った姿勢でいいんじゃないかと思ったんだよね。&lt;br /&gt;&lt;br /&gt;要するに、比較的アクセスの少ない時間帯にホットでダンプする感じ。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;というわけで、bashで簡単なバッチを作ってみたんで晒すよ。&lt;/div&gt;&lt;div&gt;rootで動かすのが前提なんで、結構単純明快。&lt;br /&gt;&lt;br /&gt;あなたが必要になるパラメータは&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;世代数&lt;/li&gt;&lt;li&gt;バックアップ先の所有者&lt;/li&gt;&lt;li&gt;MySQLの接続カウント&lt;/li&gt;&lt;li&gt;データベース名&lt;/li&gt;&lt;li&gt;ダンプファイル名&lt;/li&gt;&lt;li&gt;バックアップ先&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;の6種類だ。アカウントはユーザ名とパスワードがあるので、数で言うと7個だ。どうだ？&lt;/div&gt;&lt;script src="https://gist.github.com/1592701.js?file=backup_mysql.sh"&gt;&lt;/script&gt;&lt;br /&gt;ライセンスはどうでもいいので、一番ゆるいと思われるMITライセンスにしておくよ。&lt;br /&gt;&lt;br /&gt;けど別にライセンスなんかあったって、使いたい人は勝手に無許可に無断で無節操に使えばいいと思ってるんで、いちいち俺には連絡しないほうが良いよ。面倒くさいんで。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;■最後に&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ご理解いただけているとは思うけど一応言っておくよ。&lt;br /&gt;コピペしただけで動かない！とかほざく人や、使い方がわからない人は、俺に聞くんじゃなくて、己の手で調べるが良いよ。&lt;br /&gt;&lt;br /&gt;あと、Windowsじゃ動かないし、ぴゅう太やソードM5とかでも動かないことは火を見るより明らか。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;検索するときは、『bash』とか『バックアップ』とか『とあるサーバの管理者』とか『俺のシェルがこんなに動かないわけがない！』などで調べるんだ。&lt;br /&gt;&lt;br /&gt;もし俺のブログがヒットしたら無間地獄だ。疲労が増すよね。&lt;br /&gt;まぁ疲れたら飲みにでも行けばよいよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-7111435695520329527?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/7111435695520329527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/7111435695520329527'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2012/01/blog-post.html' title='簡単なシェルスクリプトで色々バックアップしてみよう'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-4637582932698863003</id><published>2011-12-21T00:00:00.000+09:00</published><updated>2011-12-22T11:10:20.073+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP'/><title type='text'>CakePHPのテーマ機能を使う 【CakePHP Advent Calendar 2011】</title><content type='html'>今年もやって参りました、CakePHP Advent Calender。&lt;br /&gt;21日担当の俺でやんす。&lt;br /&gt;&lt;br /&gt;俺のことはむしろどうでも良いのですぐに本題に入る訳よ。どうよ。&lt;br /&gt;&lt;br /&gt;まずこの記事の対象となるCakePHPのバージョンは1.3なので、&lt;br /&gt;1.2をお使いのモノノフがオレオレテーマ機能を自前で開発する方向性ならば、残念ながらこの場でサヨナラするか、素直に1.3を使うのが良策かと。&lt;br /&gt;&lt;br /&gt;というわけで早速やってみよう。&lt;br /&gt;&lt;br /&gt;まずはあなたが赴くままに好き勝手に作ったviewsフォルダ内を以下のような状態&lt;br /&gt;だと仮定してみるところから始めるよ。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;views&lt;/li&gt;&lt;ul&gt;&lt;li&gt;dashboards&lt;/li&gt;&lt;ul&gt;&lt;li&gt;index.ctp&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;elements&lt;/li&gt;&lt;ul&gt;&lt;li&gt;email&lt;/li&gt;&lt;ul&gt;&lt;li&gt;html&lt;/li&gt;&lt;li&gt;text&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;errors&lt;/li&gt;&lt;ul&gt;&lt;li&gt;error404.ctp&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;users&lt;/li&gt;&lt;ul&gt;&lt;li&gt;index.ctp&lt;/li&gt;&lt;li&gt;add.ctp&lt;/li&gt;&lt;li&gt;edit.ctp&lt;/li&gt;&lt;li&gt;view.ctp&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;よくある一般的なフォルダ構造だ。&lt;br /&gt;&lt;br /&gt;一般的なのかどうかはあくまで俺の主観的な話なので、『こんなふうにはなってない、俺は！』とか、『これでいいのか！？俺は！』とか『海賊王に、俺はなる！』とか言う人は、もう面倒くさいからサヨナラだ！&lt;br /&gt;&lt;br /&gt;それからcssファイルや画像ファイル、JavaScriptファイルなんかは、viewsフォルダではなくてwebrootフォルダ内に入れることになっている。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;webroot&lt;/li&gt;&lt;ul&gt;&lt;li&gt;css&lt;/li&gt;&lt;li&gt;files&lt;/li&gt;&lt;li&gt;img&lt;/li&gt;&lt;li&gt;js&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;こんなふうになるよね。&lt;br /&gt;&lt;br /&gt;で、今回テーマ機能を使うにあたって、予め決められた階層構造にしておかないと行けなかったりする。&lt;br /&gt;&lt;br /&gt;どういうふうに決められているのか？だけど、それほど難しくない。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;『views』フォルダの中に、『themed』というフォルダを作り、そこに自作のテーマを入れる&lt;/b&gt;という流れになるわけですよ。&lt;br /&gt;&lt;br /&gt;例えばあなたが好き勝手気ままに付けたテーマ名が『&lt;b&gt;kissmyass&lt;/b&gt;』だったとすると、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #999999;"&gt;app&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #999999;"&gt;views&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;themed&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;kissmyass&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;という構造になる。&lt;br /&gt;なかなか興味深いね。&lt;br /&gt;&lt;br /&gt;で、このkissmyassだけど、この中身はどうなってるの？と思うかもしれない。&lt;br /&gt;むしろ思ってくれ。&lt;br /&gt;&lt;br /&gt;答えは簡単。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;app/viewsの中身をそのまま再現&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;だ。&lt;br /&gt;&lt;br /&gt;だから、先程説明した一般的な構造を、kissmyassテーマ内に再現するとしたら、このようになる。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;app&lt;/li&gt;&lt;ul&gt;&lt;li&gt;views&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;themed&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;kissmyass&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;dashboards&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;index.ctp&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;elements&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;email&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;html&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;text&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;errors&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;error404.ctp&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;users&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;index.ctp&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;add.ctp&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;edit.ctp&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;view.ctp&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;viewsの直下にthemed/kissmyassが入るだけだ。&lt;br /&gt;簡単だね、明瞭だね。問題ないね。&lt;br /&gt;&lt;br /&gt;さて、テーマというからには、テンプレート＋アセットを管理したいと思うだろう。&lt;br /&gt;ctpファイルはテンプレートなので、画像などは含まれていない。&lt;br /&gt;そういう場合、webrootもテーマ機能の監視下に置きたくなるはずだ。&lt;br /&gt;&lt;br /&gt;しかしちょっとまたれい！チャタレイ夫人！&lt;br /&gt;&lt;br /&gt;webrootはそもそもviews内に入れるものではなく、ドキュメントルートとして位置の変更はできないのではないか？と、疑問に思う人もいる筈だ。&lt;br /&gt;いようがいまいが、俺は疑問に思った。&lt;br /&gt;&lt;br /&gt;しかし俺およびあなたには、ここで安心する手段が残されている。&lt;br /&gt;なんと、&lt;b&gt;webrootをテーマ内に入れてしまうことができる&lt;/b&gt;のだ！！&lt;br /&gt;&lt;br /&gt;つまり階層的にはこうなるゥ！！&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;app&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;views&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;themed&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;kissmyass&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;dashboards&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;index.ctp&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;elements&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;email&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;html&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;text&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;errors&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;error404.ctp&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;users&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;index.ctp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;add.ctp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;edit.ctp&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;view.ctp&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;webroot&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;css&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;files&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;img&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;js&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;何たるちや！サンタルチア！&lt;br /&gt;&lt;br /&gt;これで、themed内のkissmyassフォルダだけにすべてが入ったことになる！&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;さすがCakePHP1.3！&lt;br /&gt;俺達にできないことを&lt;br /&gt;平然とやってのけるッ！&lt;br /&gt;そこにしびれる！&lt;br /&gt;憧れるゥ！&lt;/blockquote&gt;というわけで、これで終わった。&lt;br /&gt;長く険しい戦いだった。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;応援ありがとうございました！&lt;br /&gt;オガーン先生の次回作に期待！&lt;/blockquote&gt;とは、ならない。&lt;br /&gt;終わったというのはあくまでテーマ機能の準備の話。&lt;br /&gt;&lt;br /&gt;テーマを作ったら、今度はコントローラに教えてやらないといけない。&lt;br /&gt;ここは自動ではないんだ。残念だ。&lt;br /&gt;&lt;br /&gt;コントローラ毎にテーマを設定するのは面倒臭いので、&lt;br /&gt;ここではapp_controller.phpを用意し、その中のbeforeFilterメソッドで指定してしまおうと思う。&lt;br /&gt;これなら他のコントローラにテーマに関する設定を書かないで済む。&lt;br /&gt;&lt;br /&gt;というわけで、行ってみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app/app_controller.php&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$this-&amp;gt;view = 'Theme';&lt;br /&gt;$this-&amp;gt;theme = 'kissmyass';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで完了だ。&lt;br /&gt;ブラウザで見ていただきたい。&lt;br /&gt;&lt;br /&gt;意外にあっけなくできたはずだ。&lt;br /&gt;&lt;br /&gt;これでもうあなたは、毎回ゼロから管理画面などのデザイン性が強く要求されないアプリのデザインを作る必要がなくなり、今後はワンソース管理されたデザインで統一することができるようになったはずだ。&lt;br /&gt;&lt;br /&gt;ビューファイルは毎回同じではないと思うけど、usersやdashboardsなんかは（俺は）毎回似たようなものをこさえていたので、これでかなり便利になった次第。&lt;br /&gt;&lt;br /&gt;そうそう、もしテーマがkissmyassだけじゃなく、『&lt;b&gt;kickme&lt;/b&gt;』なんかもあるのであれば、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;app&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;views&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;themed&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;kickme&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;kissmyass&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;などと並べてフォルダを置けば良い。&lt;br /&gt;あとはコントローラ側での話だ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;唐突に終わるんだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: large;"&gt;&lt;b&gt;CakePHP Advent Calender 2011&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;前の人：20th December&lt;br /&gt;『&lt;a href="http://d.hatena.ne.jp/hiromi2424/20111220/1324387254"&gt;Migrationsプラグインの実践的運用&lt;/a&gt;』&lt;br /&gt;&amp;nbsp;&lt;a href="https://twitter.com/#!/@hiromi2424"&gt;@hiromi2424&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;次の人：22th Deceｍber&lt;br /&gt;&amp;nbsp;『&lt;a href="http://blogs.dion.ne.jp/muller/archives/10540927.html"&gt;CakePHP2.0 で FacebookAuthenticateによるAuthの認証&lt;/a&gt;』&lt;br /&gt;&amp;nbsp;&lt;a href="https://twitter.com/#!/@miurakatsu"&gt;@miurakatsu&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-4637582932698863003?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4637582932698863003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4637582932698863003'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/12/cakephp-cakephp-advent-calendar-2011.html' title='CakePHPのテーマ機能を使う 【CakePHP Advent Calendar 2011】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-3747378142931367598</id><published>2011-11-22T11:58:00.001+09:00</published><updated>2011-11-22T16:16:15.805+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='検索'/><category scheme='http://www.blogger.com/atom/ns#' term='CakeDC'/><title type='text'>CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【2/2】</title><content type='html'>さて、今回でSearch Pluginの説明は終わらせる予定だ。&lt;br /&gt;CakePHPには他にもびっくりするくらい便利なプラグインが山盛り存在する。&lt;br /&gt;&lt;br /&gt;もちろんヘルパ、コンポーネント、ビヘイビアなども沢山あるので、一度Bakeryを見てみるのも良いと思う。&lt;br /&gt;&lt;br /&gt;というわけで本題に入るが、前回適当すぎて投げやりだった、ページャのスタイルを直してしまおうと思う。&lt;br /&gt;&lt;br /&gt;以下のCSSスニペットを、/app/webroot/css/cake.generic.cssの最終行にでも追記しておこう。最低限のスタイルを設定してみた。&lt;br /&gt;&lt;pre class="css" name="code"&gt;.pagers {&lt;br /&gt;  text-align:center;&lt;br /&gt;  font-size:large;&lt;br /&gt;}&lt;br /&gt;.pagers a,&lt;br /&gt;.pagers span {&lt;br /&gt;  padding:0 0.2em;&lt;br /&gt;}&lt;br /&gt;.pagers .disabled {&lt;br /&gt;  color:#ccc;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;これでどうにか人様にお見せできるようになった。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-n2n_QcngAns/TssQ0v-Ak3I/AAAAAAAAEKk/IJZQ8Vht8ZI/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://2.bp.blogspot.com/-n2n_QcngAns/TssQ0v-Ak3I/AAAAAAAAEKk/IJZQ8Vht8ZI/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;■モデルを作ろう&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;さて、SearchPluginを使うためには、モデルファイルが必要だ。&lt;br /&gt;以下の場所にモデルファイルを作ろう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;モデル&lt;/b&gt; /app/models/user.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class User extends AppModel {&lt;br /&gt;  public $name = 'User';&lt;br /&gt;&lt;br /&gt;  // 検索プラグイン&lt;br /&gt;  public $actsAs = array('Search.Searchable');&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;$actsAsで、SearchPluginを読み込む。つまりこの場合はビヘイビアだ。&lt;br /&gt;&lt;br /&gt;これでモデルはできたけど、実はSearchPlugin、このモデルファイルに設定を記述することになっている。&lt;br /&gt;モデルだけではなく、コントローラ側にも必要だ。&lt;br /&gt;&lt;br /&gt;正直面倒臭いが、とりあえず教科書通りやってみよう。&lt;br /&gt;&lt;br /&gt;まずは、どのモデルのどのフィールドを検索対象にするのか、を連想配列で指定する。これをフィルタと呼ぶ。&lt;br /&gt;というわけで、publicな$filterArgsに代入する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;モデル&lt;/b&gt; /app/models/user.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class User extends AppModel {&lt;br /&gt;  public $name = 'User';&lt;br /&gt;&lt;br /&gt;  // 検索プラグイン&lt;br /&gt;  public $actsAs = array('Search.Searchable');&lt;br /&gt;&lt;br /&gt;  // 検索対象のフィルタ設定&lt;br /&gt;  public $filterArgs = array(&lt;br /&gt;    array('name' =&amp;gt; 'id', 'type' =&amp;gt; 'value', 'field' =&amp;gt; 'User.id'),&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;これで、Userモデルのidフィールドを対象に検索させる設定になる。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;name&lt;/li&gt;&lt;li&gt;type&lt;/li&gt;&lt;li&gt;field&lt;/li&gt;&lt;/ul&gt;それぞれに当てはまる内容を記述すれば良い。&lt;br /&gt;&lt;br /&gt;注意点として、nameはフィールド名ではなく、inputタグで使うname属性が元になっていると言う事だ。&lt;br /&gt;&lt;br /&gt;そしてtypeはDOMで言うところの[type="text"]に近い扱いになる。textならvalueと指定すればOK。他にもlike、query、subquelyなどあるので、部分一致させたい場合などはlikeにすれば良い。&lt;br /&gt;fieldは、モデルとフィールドを指定する。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;その他にもmethodという項目もあり、独自に実装したメソッド名を指定することもできるが、詳しくは付属のmdファイルをテキストエディタで開いて一読しておくことを強くおススメする。&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■コントローラを編集&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;というわけで、とりあえずUserモデルのidフィールドの設定をしてみたが、今度はこれをコントローラ側で受けなければいけない。&lt;br /&gt;そのためにコントローラを編集する必要がある。&lt;br /&gt;&lt;br /&gt;受けるための配列はpublicな$presetVarsだ。&lt;br /&gt;ついでにコンポーネント、モデルの指定などもpublicで指定しておくことにする。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;コントローラ&lt;/b&gt; /app/controller/users_controller.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class UsersController extends AppController {&lt;br /&gt;  public $name = 'Users';&lt;br /&gt;  public $uses = array('User', 'Profile');&lt;br /&gt;  public $components = array('Search.Prg');&lt;br /&gt;&lt;br /&gt;  // 検索対象のフィールド設定&lt;br /&gt;  public $presetVars = array(&lt;br /&gt;    array('field' =&amp;gt; 'id', 'type' =&amp;gt; 'value'),&lt;br /&gt;  );&lt;br /&gt;　・&lt;br /&gt;　・&lt;br /&gt;　・&lt;br /&gt;&lt;/pre&gt;$presetvarsの内容だけど、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;field&lt;/li&gt;&lt;li&gt;type&lt;/li&gt;&lt;/ul&gt;とある。&lt;br /&gt;&lt;br /&gt;fieldはfilterVarsで指定したnameを指定し、filterVarsと対になるようにしておくこと。&lt;br /&gt;typeは通常valueで問題ないが、複数選択などの場合はcheckboxなどを指定できるようになっている。&lt;br /&gt;詳しくは付属のmdファイルを軽く読んでいただきたい。&lt;br /&gt;&lt;br /&gt;で、モデルファイルとコントローラファイルの2ヶ所にズラズラと同じ数だけ連想配列を書くのがちょっとどうかな、と思っている。&lt;br /&gt;いきなりだけど、コントローラではモデルの配列を代入するだけにしておいて、この内容もモデルに書いてしまおうと思う。&lt;br /&gt;これは別に個人の自由なので、やらなくてもいいし、もちろんやっても良い。&lt;br /&gt;&lt;br /&gt;コントローラは以下のようにしておくと良い（全ソース）。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;コントローラ&lt;/b&gt; /app/controllers/users_controller.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class UsersController extends AppController {&lt;br /&gt;&lt;br /&gt;  public $name = 'Users';&lt;br /&gt;  public $uses = array('User', 'Profile');&lt;br /&gt;  public $components = array('Search.Prg');&lt;br /&gt;  public $presetVars = array();&lt;br /&gt;&lt;br /&gt;  public function beforeFilter()&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;    // 検索対象のフィールド設定代入&lt;br /&gt;    $this-&amp;gt;presetVars = $this-&amp;gt;User-&amp;gt;presetVars;&lt;br /&gt;&lt;br /&gt;    // ページャ設定&lt;br /&gt;    $pager_numbers = array(&lt;br /&gt;      'before' =&amp;gt; ' - ',&lt;br /&gt;      'after'=&amp;gt;' - ',&lt;br /&gt;      'modulus'=&amp;gt; 10,&lt;br /&gt;      'separator'=&amp;gt; ' ',&lt;br /&gt;      'class'=&amp;gt;'pagenumbers'&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('pager_numbers', $pager_numbers);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function index()&lt;br /&gt;  {&lt;br /&gt;    $this-&amp;gt;paginate = array(&lt;br /&gt;      'limit' =&amp;gt; 3&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;paginate('User'));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;で、代入元となるpresetVarsはモデルファイルに書いてしまおう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;モデル&lt;/b&gt; /app/models/user.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class User extends AppModel {&lt;br /&gt;  public $name = 'User';&lt;br /&gt;&lt;br /&gt;  // 検索プラグイン&lt;br /&gt;  public $actsAs = array('Search.Searchable');&lt;br /&gt;&lt;br /&gt;  // 検索対象のフィルタ設定&lt;br /&gt;  public $filterArgs = array(&lt;br /&gt;    array('name' =&amp;gt; 'id', 'type' =&amp;gt; 'value', 'field' =&amp;gt; 'User.id'),&lt;br /&gt;  );&lt;br /&gt;  &lt;br /&gt;  // 検索対象のフィールド設定&lt;br /&gt;  public $presetVars = array(&lt;br /&gt;    array('field' =&amp;gt; 'id', 'type' =&amp;gt; 'value'),&lt;br /&gt;  );&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;これで、検索項目を増やすときにいちいちモデルファイルとコントローラファイルを行き来して編集する必要がなくなった。&lt;br /&gt;&lt;br /&gt;コントローラもスキニーな状態を保てる。その分モデルがファットになるが、本来MVCフレームワークとはそういうものなので甘受しておくと寝覚めが良いだろう。&lt;br /&gt;&lt;br /&gt;というわけでモデルはこれで一旦終了。&lt;br /&gt;&lt;br /&gt;今度は検索結果を反映させるために、ページャにSearch Pluginを組み込む必要がある。&lt;br /&gt;と言ってもぜんぜん大したこと無い。&lt;br /&gt;&lt;br /&gt;ビヘイビアのparseCriteriaというメソッドに対して、GETパラメータを当て込むと、それがfindの条件になってくれるというスグレモノ。&lt;br /&gt;&lt;br /&gt;以下のように、コントローラのindexメソッドを変更してみるが良い。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;コントローラ&lt;/b&gt; /app/controllers/users_controller.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;public function index()&lt;br /&gt;  {&lt;br /&gt;    // 検索条件設定&lt;br /&gt;    $this-&amp;gt;Prg-&amp;gt;commonProcess();&lt;br /&gt;    // 検索条件取得&lt;br /&gt;    $conditions = $this-&amp;gt;User-&amp;gt;parseCriteria($this-&amp;gt;passedArgs);&lt;br /&gt;&lt;br /&gt;    $this-&amp;gt;paginate = array(&lt;br /&gt;      'conditions' =&amp;gt; $conditions,&lt;br /&gt;      'limit' =&amp;gt; 3,&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;paginate('User'));&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;一度$conditions変数に入れているのは、ただわかりやすいからだ。&lt;br /&gt;直接paginateに入れてしまっても構わない。&lt;br /&gt;&lt;br /&gt;ここらへんは個人の好きにするのが良い。&lt;br /&gt;いちいちどっちがいいのかなんか、くだらない質問はしてはいけない。みんな忙しいのだ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■検索してみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、早速ブラウザで検索してみよう。&lt;br /&gt;ユーザIDに「９」など記入して検索を実行すると、正しく検索結果が反映されたのがわかると思う。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fmno4_GVD00/Tss5rVeh3CI/AAAAAAAAEK8/lE71O2jvh3Y/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-fmno4_GVD00/Tss5rVeh3CI/AAAAAAAAEK8/lE71O2jvh3Y/s320/Screenshot-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ただこのままだと検索結果が少なすぎて、ページャのテストができない。&lt;br /&gt;今度は検索項目を増やし、ついでにプロフィールも検索できるようにしようじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;■検索項目を増やす&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;まずはProfileモデルも検索対象とするため、予めUserモデルとProfileモデルの関連付けをお行う。&lt;br /&gt;モデルファイルを開いて以下のように編集する。&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;class User extends AppModel {&lt;br /&gt;  public $name = 'User';&lt;br /&gt;&lt;br /&gt;  // 検索プラグイン&lt;br /&gt;  public $actsAs = array('Search.Searchable');&lt;br /&gt;&lt;br /&gt;  // アソシエーション&lt;br /&gt;  public $hasOne = array(&lt;br /&gt;    'Profile' =&amp;gt; array(&lt;br /&gt;      'className'  =&amp;gt; 'Profile',&lt;br /&gt;      'foreignKey' =&amp;gt; 'user_id',&lt;br /&gt;      'conditions' =&amp;gt; null,&lt;br /&gt;      'fields'     =&amp;gt; null,&lt;br /&gt;      'dependent'  =&amp;gt; true,&lt;br /&gt;    ),&lt;br /&gt;  );&lt;br /&gt;　・&lt;br /&gt;　・&lt;br /&gt;　・&lt;br /&gt;&lt;/pre&gt;続いて同じくモデルファイルに、項目名を増やす。&lt;br /&gt;今回は３つにしよう。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ユーザID&lt;/li&gt;&lt;li&gt;ユーザ名&lt;/li&gt;&lt;li&gt;ニックネーム&lt;/li&gt;&lt;/ul&gt;だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;モデル&lt;/b&gt; /app/models/user.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;// 検索対象のフィルタ設定&lt;br /&gt;  public $filterArgs = array(&lt;br /&gt;    array('name' =&amp;gt; 'id', 'type' =&amp;gt; 'value', 'field' =&amp;gt; 'User.id'),&lt;br /&gt;    array('name' =&amp;gt; 'username', 'type' =&amp;gt; 'like', 'field' =&amp;gt; 'User.username'),&lt;br /&gt;    array('name' =&amp;gt; 'nickname', 'type' =&amp;gt; 'like', 'field' =&amp;gt; 'Profile.nickname'),&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  // 検索対象のフィールド設定&lt;br /&gt;  public $presetVars = array(&lt;br /&gt;    array('field' =&amp;gt; 'id', 'type' =&amp;gt; 'value'),&lt;br /&gt;    array('field' =&amp;gt; 'username', 'type' =&amp;gt; 'value'),&lt;br /&gt;    array('field' =&amp;gt; 'nickname', 'type' =&amp;gt; 'value'),&lt;br /&gt;  );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;前回、検索フォームのname属性には存在しないフィールド名でもOKと書いたが、このように、どんな名前だろうが、filterVars内のfieldでモデル.フィールドをヒモ付てしまうので、何でもありという意味だ。&lt;br /&gt;&lt;br /&gt;というわけで、次は検索フォームに項目を増やそうじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;エレメント&lt;/b&gt; /app/views/elements/searchForm.ctp&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;create('User', array('url' =&amp;gt; '/users/index')))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;fieldset&amp;gt;&lt;br /&gt;  &amp;lt;legend&amp;gt;Search or Die!&amp;lt;/legend&amp;gt;&lt;br /&gt;  &amp;lt;dl&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ユーザID&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;input('id', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false)))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ユーザ名&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;input('username', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false )))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ニックネーム&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;input('nickname', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false )))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;  &amp;lt;/dl&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;?php e($this-&amp;gt;Form-&amp;gt;submit('検索', array('div' =&amp;gt; false, 'escape' =&amp;gt; false)))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/fieldset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;end())?&amp;gt;&lt;br /&gt;&lt;/pre&gt;９行目に「ユーザ名」を入れてみた。そして本体となるindex.ctp側も編集しよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ビュー&lt;/b&gt; /app/views/users/index.ctp&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php $paginator-&amp;gt;options(array('url' =&amp;gt; $this-&amp;gt;passedArgs)); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('searchForm'))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('pager'))?&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('ID', 'User.id'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('ユーザ名', 'User.username'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('ニックネーム', 'Profile.nickname'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('作成日', 'User.created'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('更新日', 'User.modified'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php foreach($users as $user):?&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['id'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['username'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['Profile']['nickname'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['created'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['modified'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php endforeach?&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('pager'))?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AJR_81MBBaA/TstJz4eK5rI/AAAAAAAAELI/DxmX_4-9M_E/s1600/Screenshot-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://2.bp.blogspot.com/-AJR_81MBBaA/TstJz4eK5rI/AAAAAAAAELI/DxmX_4-9M_E/s320/Screenshot-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ブラウザで見てみると、こんなふうになったはずだ。&lt;br /&gt;早速、ユーザ名に「com」と入れて検索してみよう。2ページ分表示されたはずだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-V2IDgq7ZEZM/TstKJeG6raI/AAAAAAAAELQ/dXi7ciSoIUk/s1600/Screenshot-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-V2IDgq7ZEZM/TstKJeG6raI/AAAAAAAAELQ/dXi7ciSoIUk/s320/Screenshot-3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そしてページャで2ページ目をクリックしても、検索条件は消えないで残っているはず。&lt;br /&gt;&lt;br /&gt;どうして残るのかというと、Search PluginはURLパラメータに検索条件をすべて組み込んでしまうから、URLを意識してくれるページャと併用すると威力を発揮するわけだ。&lt;br /&gt;&lt;br /&gt;これはつまり、ぜんぜん関係ないページから検索条件付きのURLでリンクしても、検索結果を一発で表示できると言う意味になる。&lt;br /&gt;&lt;br /&gt;例えば&lt;br /&gt;8 管理者&lt;br /&gt;4 代理店&lt;br /&gt;2 クライアント&lt;br /&gt;1 一般ユーザ&lt;br /&gt;というパラメータを持ったユーザをUserモデルだけで管理する場合、ユーザロールとしてrollフィールドを付けると考えてみよう。&lt;br /&gt;&lt;br /&gt;クライアントだけ見せたい場合、わざわざユーザ管理画面からクライアントをプルダウンやラジオボタンで選択し、検索ボタンをクリック、なんてことはせず、ただ単純に&lt;br /&gt;&lt;br /&gt;/users/index/roll:2&lt;br /&gt;&lt;br /&gt;と、条件をURLに付与してリンクさせれば、それでOKだ。&lt;br /&gt;試しに、以下のURLを別のタブで開いたブラウザで開いてみて欲しい。&lt;br /&gt;&lt;br /&gt;/users/index/nickname:太郎&lt;br /&gt;&lt;br /&gt;マッキー太郎がヒットした状態でページが表示されたはずだ。&lt;br /&gt;これは便利。&lt;br /&gt;&lt;br /&gt;というわけで、いろいろ活用できる便利なプラグイン、SearchPluginの導入のヒントを書いてみた。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-3747378142931367598?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/3747378142931367598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/3747378142931367598'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/11/cakephp13search-plugin22.html' title='CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【2/2】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-n2n_QcngAns/TssQ0v-Ak3I/AAAAAAAAEKk/IJZQ8Vht8ZI/s72-c/Screenshot.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6533541827954794606</id><published>2011-11-02T14:08:00.000+09:00</published><updated>2012-01-18T23:10:39.864+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='検索'/><category scheme='http://www.blogger.com/atom/ns#' term='CakeDC'/><title type='text'>CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【1/2】</title><content type='html'>CakePHPには便利な機能が山盛りで、中でもページネータ（以下ページャ）はかなりの使用頻度があるんじゃないだろうか。&lt;br /&gt;&lt;br /&gt;データベースの特定のテーブルを一覧表示する際なんか、数千件を1ページに収めるわけにもいかず、かといって先頭の10件だけを表示するなんてアホらしすぎるわけだ。&lt;br /&gt;&lt;br /&gt;ページャというのは、1ページ10件、残りは次のページ！的な振る舞いをするコンテナのことだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-LNT8X2UZxtM/TrDSoGpv_iI/AAAAAAAADyA/Ia_ebzI1rTk/s1600/pager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="106" src="http://2.bp.blogspot.com/-LNT8X2UZxtM/TrDSoGpv_iI/AAAAAAAADyA/Ia_ebzI1rTk/s320/pager.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;代表的ないくつかのページャ&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;CakePHPではこのページャをヘルパを使っていろいろなスタイルで表示できるんだけど、一つ困ったことがある。それはなにか！？&lt;br /&gt;&lt;br /&gt;独自の検索フォームと絡めるとき、検索結果を維持したままページ移動ができないという点だ。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;検索フォームの「名前」に「太郎」と入力して「検索」ボタンクリック&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;「名前」に「太郎」が含まれるリストの1ページ目が表示&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;ページャで2ページ目へ移動&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;「名前」に「太郎」が含まれる条件がクリアされ、何も検索してない状態の2ページ目が表示&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;という事になってしまう。&lt;br /&gt;どうしてこうなるかというと、検索条件とページャが連動していないため、どちらかが優先されてしまうわけだ。&lt;br /&gt;&lt;br /&gt;これはかなり死活問題なのではないだろうか。&lt;br /&gt;&lt;br /&gt;解決策としては、検索条件として送られてきたデータと、ページャで送られてきたデータをマージすれば良いと言う事になる。&lt;br /&gt;&lt;br /&gt;となると、URLにパラメータが点いている状態の、いわゆるGETパラメータ、そしてPOSTで送られるデータを互いに入れ合えば良い。&lt;br /&gt;&lt;br /&gt;そのデータをURLなりセッションなりに保存しておけば良い話だ。&lt;br /&gt;&lt;br /&gt;実は個人的に、この方法を使い、コントローラ内で以下のような処理をしたことがある。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. POSTにGETを代入&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$this-&amp;gt;data[MODEL][name] = $this-&amp;gt;passedArgs[name];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;2. 検索条件に追加&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$conditions = am($conditinos, array(&lt;br /&gt;  'User.id' =&amp;gt; $tihs-&amp;gt;data[MODEL][name]&lt;br /&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;3. GETにPOSTを代入&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$this-&amp;gt;passedArgs[name] =&amp;nbsp;$this-&amp;gt;data[MODEL][name];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;4. POSTをセッションに保存&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$this-&amp;gt;Session-&amp;gt;write('conditinos', $conditions);&lt;/pre&gt;※セッションに条件を入れておけば、検索結果を反映させた状態でCSVダウンロードさせたりすることができる(・∀・)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. 検索条件と定例条件をマージ&lt;/b&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;$conditions = am($conditions, array(&lt;br /&gt;  'User.is_enabled' =&amp;gt; 1&lt;br /&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これをプライベートメソッドなどで実装して、毎回検索条件とページャの情報、その他をくっつける作業を行なっていた。&lt;br /&gt;しかし、フィールドが増えたりするととたんに面倒くさくなる。ヒューマンエラーが増える。&lt;br /&gt;&lt;br /&gt;そして例えば複数の都道府県を選択できる、selectタイプでmultipleなフォームだと、途端にデータがarray()になってしまい、いろいろな不具合が出てしまう。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;User.idが1のものを条件にする場合は、URLのリクエストパラメータに『/user_id:1』などと指定すれば良いが、例えば東京の3、大阪の6というように複数指定された場合、単純にURLに追加すると『/prefecture:array()』となってしまうので、東京も大阪も条件に入らない。予め配列は文字列にしておく必要がある、という意味。&lt;/blockquote&gt;つまり一旦配列をハイフンなどのデリミタで連結した1つの文字列に加工して、それを最終的にデリミタでexplodeするなんて面倒なことをしなくてはいけなくなるし、それにこの時点でハイフンがキーワードとして使えなくなる。&lt;br /&gt;&lt;br /&gt;もうダメポ(´д⊂)‥ﾊｩ。&lt;br /&gt;&lt;br /&gt;これでは将来性もないし、同じような記述が大量に発生するのでソースもモンブラン化するし、良いことほとんどないじゃないか、と思い、CakePHPの鉄火場とも言える、Bakeryを検索してみたら、なんてことはない、検索用のプラグインがあるじゃないか。&lt;br /&gt;&lt;br /&gt;というわけで、このCakePHPの検索プラグイン『Search Plugin』を使って見ることにした。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ダウンロードしよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まずはダウンロードしよう。&lt;br /&gt;ダウンロード元は、Githubだ。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/CakeDC/Search"&gt;&lt;b&gt;https://github.com/CakeDC/Search&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このページの『ZIP』をクリックすると、zipファイルでダウンロードすることができる。&lt;br /&gt;ダウンロードしたら早速解凍しよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8uQACeLqeGE/TrFIaYIJnBI/AAAAAAAADyM/5heGR7SRcSE/s1600/zip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-8uQACeLqeGE/TrFIaYIJnBI/AAAAAAAADyM/5heGR7SRcSE/s1600/zip.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;『CakeDC-search-1.1-0-g402a169.zip』的なファイルがダウンロードされる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■解凍しよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;解凍すると、以下のようなフォルダ構成になっている。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;CakeDC-search-402a169&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;controllers&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;components&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;prg.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;locale&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;deu&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LC_MESSAGES&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;search.po&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;fre&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LC_MESSAGES&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;search.po&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;por&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LC_MESSAGES&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;search.po&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;rus&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LC_MESSAGES&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;search.po&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;spa&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;LC_MESSAGES&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;search.po&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;search.pot&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;models&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;behaviors&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;searchable.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;tests&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;cases&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;behaviors&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;searchable.test.php&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;components&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;prg.test.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;fixtures&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;article_fixture.php&lt;/li&gt;&lt;li&gt;post_fixture.php&lt;/li&gt;&lt;li&gt;tag_fixture.php&lt;/li&gt;&lt;li&gt;tagged_fixture.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;license.txt&lt;/li&gt;&lt;li&gt;readme.md&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;バージョンによって中身は変わってくる可能性もあるが、だいたいこのくらいのボリュームだろう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■インストールしよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;内容の確認が終わったら、次はトップのフォルダ名を『CakeDC-search-402a169』から『search』へ変更しよう。&lt;br /&gt;&lt;br /&gt;そしてこの『search』フォルダを、CakePHPのapp/plugins内に移動、もしくはコピーすれば、インストールは完了だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■何かしら検索してみよう&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;何か検索してみようと思うので、予めアソシエーションを貼った状態のモデルを作っておこうと思う。&lt;br /&gt;&lt;br /&gt;構成はこんな感じ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;User&lt;/b&gt; hasOne &lt;b&gt;Profile&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;つまり、最終的には&lt;br /&gt;Userモデル、Profileモデル&lt;br /&gt;をhasOne指定でつなげておくという感じになる。&lt;br /&gt;&lt;br /&gt;最初はまずSearchプラグインの基本的な使い方をやって見るため、Userモデルだけでやってみる。&lt;br /&gt;&lt;br /&gt;ちなみに以下のようなSQLでテーブルを作っておくと面倒くさくないかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;CREATE TABLE IF NOT EXISTS `profiles` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `user_id` int(5) NOT NULL,&lt;br /&gt;  `nickname` varchar(32) NOT NULL,&lt;br /&gt;  `gender` tinyint(1) NOT NULL,&lt;br /&gt;  `birthday` date NOT NULL,&lt;br /&gt;  `created` datetime NOT NULL,&lt;br /&gt;  `modified` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `user_id` (`user_id`,`nickname`,`gender`,`birthday`),&lt;br /&gt;  KEY `modified` (`modified`)&lt;br /&gt;) ENGINE=InnoDB  DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;br /&gt;CREATE TABLE IF NOT EXISTS `users` (&lt;br /&gt;  `id` int(5) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `username` varchar(64) NOT NULL,&lt;br /&gt;  `password` varchar(64) NOT NULL,&lt;br /&gt;  `created` datetime NOT NULL,&lt;br /&gt;  `modified` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `username` (`username`,`password`)&lt;br /&gt;) ENGINE=InnoDB  DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;/pre&gt;※usersテーブルのusernameはメールアドレスを入れる予定だが、バイナリにしておくのも手。しかし大文字小文字を区別しない方式でいくなら、素直にvarcharにしておくのもアリだ。&lt;br /&gt;&lt;br /&gt;もしあなたが猛烈にデータを入れるのが面倒に感じるのであれば、以下に適当に作ったデータがあるので、SQLを実行してデータを入れておくと良いかもしれない。&lt;br /&gt;&lt;pre class="sql" name="code"&gt;INSERT INTO `profiles` (`id`, `user_id`, `nickname`, `gender`, `birthday`, `created`, `modified`) VALUES&lt;br /&gt;(1, 1, 'マッキー太郎', 1, '1990-10-01', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(2, 2, '倍アグラン', 1, '1980-05-04', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(3, 3, 'エキサイト多恵子', 2, '1992-12-08', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(4, 4, '史彦パインステート', 1, '1965-11-24', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(5, 5, 'Yas-Kaz', 1, '1984-09-21', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(6, 6, 'ウッキー氏田', 2, '1999-08-08', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(7, 7, 'リック', 2, '1996-03-30', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(8, 8, 'puripuri-chan', 2, '1984-12-15', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(9, 9, 'チョーサンピル', 1, '1989-05-14', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(10, 10, '道端御三郎', 1, '1963-01-24', '2011-11-03 18:44:32', '2011-11-03 18:44:32');&lt;br /&gt;&lt;br /&gt;INSERT INTO `users` (`id`, `username`, `password`, `created`, `modified`) VALUES&lt;br /&gt;(1, 'taroh@asdf.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(2, 'jiro@qwer.net', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(3, 'yamada.haruko@example.co.jp', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(4, 'jimmy@ledzeppelin.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(5, 'james@metallica.co.jp', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(6, 'saburo@zcxv.tv', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(7, 'sonofabitch@fxxkyou.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(8, 'youaremydestiny@not.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(9, 'titty.twister@fromdusktilldown.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32'),&lt;br /&gt;(10, 'myfriends@was.gone.com', '0dedc1e879a73184aaaf574e95436e80d95bf563', '2011-11-03 18:44:32', '2011-11-03 18:44:32');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;そして用意したコントローラ、ビューは以下になる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;コントローラ&lt;/b&gt;（/app/controllers/users_controler.php）&lt;br /&gt;&lt;pre class="php" name="code"&gt;class UsersController extends AppController {&lt;br /&gt;  public $name = 'Users';&lt;br /&gt;&lt;br /&gt;  public function index()&lt;br /&gt;  {&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;User-&amp;gt;find('all'));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;ビュー&lt;/b&gt;（/app/views/users/index.ctp）&lt;br /&gt;&lt;pre class="html" name="code"&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;ユーザ名&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;作成日&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;更新日&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php foreach($users as $user):?&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['id'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['username'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['created'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['modified'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php endforeach?&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これらを普通にブラウザで表示すると、以下のようになる。&lt;br /&gt;なんの変哲もない、CakePHPデフォルトテイストだし、項目ソート機能すらない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4dJzX_u7YvI/TrU6VTp_0uI/AAAAAAAADy4/2YWZCR0oG1g/s1600/Screenshot-CakePHP%253A+the+rapid+development+php+framework%253A+Users+-+Google+Chrome.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-4dJzX_u7YvI/TrU6VTp_0uI/AAAAAAAADy4/2YWZCR0oG1g/s320/Screenshot-CakePHP%253A+the+rapid+development+php+framework%253A+Users+-+Google+Chrome.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このリストの上部に、検索フォームを付けるとする。&lt;br /&gt;&lt;br /&gt;内容的に別ファイルにしておくと後が楽そうなので、エレメントとして作成しておくこととする。&lt;br /&gt;面倒なら別にindex.ctpに直接書いてしまっても構わないし、ファイル名だって好きな名前で構わない。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;検索フォーム&lt;/b&gt; /app/views/elements/searchForm.ctp&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;create('User', array('url' =&amp;gt; '/users/index')))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;fieldset&amp;gt;&lt;br /&gt;  &amp;lt;legend&amp;gt;Search or Die!&amp;lt;/legend&amp;gt;&lt;br /&gt;  &amp;lt;dl&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ユーザID&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;input('id', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false)))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;    &amp;lt;dt&amp;gt;&amp;lt;label&amp;gt;ニックネーム&amp;lt;/label&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;    &amp;lt;dd&amp;gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;input('nickname', array(&lt;br /&gt;      'type' =&amp;gt; 'text', 'div' =&amp;gt; false, 'label' =&amp;gt; false )))?&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;  &amp;lt;/dl&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;?php e($this-&amp;gt;Form-&amp;gt;submit('検索', array('div' =&amp;gt; false, 'escape' =&amp;gt; false)))?&amp;gt;&lt;br /&gt;  &lt;br /&gt;&amp;lt;/fieldset&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;Form-&amp;gt;end())?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;とりあえず、User.id（ユーザID）とニックネーム（Profile.nickname）の検索フォームだ。&lt;br /&gt;&lt;br /&gt;ただし、モデル名を付けないで指定するという点には気を付ける。&lt;br /&gt;これはHTMLタグのinputでname属性が自動生成される場合のネーミングを簡易的にするためだ。&lt;br /&gt;&lt;br /&gt;※後で判明するとは思うが、実はまったく存在しないフィールド名でもOK&lt;br /&gt;&lt;br /&gt;このエレメントを読み込むために、index.ctpに以下の行を追加しておく。&lt;br /&gt;追加する場所は、tableタグの上だ。&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php e($this-&amp;gt;element('searchForm'))?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;画面は以下のようになったはず。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DzYxRlveAIw/TsnfXROrV3I/AAAAAAAAEJ4/Xx8ns2SpknE/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="234" src="http://4.bp.blogspot.com/-DzYxRlveAIw/TsnfXROrV3I/AAAAAAAAEJ4/Xx8ns2SpknE/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;この検索フォームで検索した結果と、ページャの番号を連動させれば良いことになる。&lt;br /&gt;ちなみにページャが表示されてないので、これからページャの設定を行おうじゃないか。&lt;br /&gt;&lt;br /&gt;現状だとデータ自体が10件しかないので、1ページには3件の表示とし、4ページまで表示できるようにしておく。&lt;br /&gt;&lt;br /&gt;さてその設定をどこに書くのか？といわれれば、users_controller.phpに書くと答えよう。&lt;br /&gt;&lt;br /&gt;具体的には、Userモデルでデータを引っ張ってくるところをページャ用に変更しなければいけない。&lt;br /&gt;大した作業ではないので、何をどうするのかは割愛する。以下のソースを見てもらえれば、変更箇所はすぐにわかるはずだ。&lt;br /&gt;&lt;br /&gt;というわけで、users_controller.phpを以下のように編集していただきたい。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;コントローラ&lt;/b&gt; /app/controllers/users_controller.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;class UsersController extends AppController {&lt;br /&gt;  public $name = 'Users';&lt;br /&gt;&lt;br /&gt;  public function beforeFilter()&lt;br /&gt;  {&lt;br /&gt;    // ページャ設定&lt;br /&gt;    $pager_numbers = array(&lt;br /&gt;      'before' =&amp;gt; ' - ',&lt;br /&gt;      'after'=&amp;gt;' - ',&lt;br /&gt;      'modulus'=&amp;gt; 10,&lt;br /&gt;      'separator'=&amp;gt; ' ',&lt;br /&gt;      'class'=&amp;gt;'pagenumbers'&lt;br /&gt;    );&lt;br /&gt;    $this-&amp;gt;set('pager_numbers', $pager_numbers);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function index()&lt;br /&gt;  {&lt;br /&gt;    $this-&amp;gt;paginate = array(&lt;br /&gt;      'limit' =&amp;gt; 3&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    $this-&amp;gt;set('users', $this-&amp;gt;paginate('User'));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;beforeFilterメソッドの追加、index()メソッド内の変更、の2点。&lt;br /&gt;&lt;br /&gt;この状態でブラウザをリロードすると、10件表示されていたデータが3件になる。&lt;br /&gt;残りの7件を表示可能にするため、ここでページャのビューを設定することにする。&lt;br /&gt;&lt;br /&gt;出来ればページャはリストの上下に表示させたい。&lt;br /&gt;とはいえ、いくらテストだからって、全く同じ内容のものを記述するのは無駄ってもんだ。&lt;br /&gt;&lt;br /&gt;というわけで、ページャもエレメントにする。&lt;br /&gt;以下のエレメントを準備しよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ページャ&lt;/b&gt; /app/views/elements/pager.ctp&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;div class="pagers"&amp;gt;&lt;br /&gt;  &amp;lt;?php ($paginator-&amp;gt;hasPrev())?e($paginator-&amp;gt;first('&amp;amp;laquo;', array('class'=&amp;gt;'first', 'escape'=&amp;gt;false))):e('&amp;lt;span class="disabled"&amp;gt;&amp;amp;laquo;&amp;lt;/span&amp;gt;')?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $paginator-&amp;gt;prev('&amp;amp;lsaquo;', array('escape' =&amp;gt; false), null, array('class'=&amp;gt;'disabled', 'tag' =&amp;gt; 'span', 'escape' =&amp;gt; false));?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $paginator-&amp;gt;numbers($pager_numbers);?&amp;gt;&lt;br /&gt;  &amp;lt;?php echo $paginator-&amp;gt;next('&amp;amp;rsaquo;', array('escape' =&amp;gt; false), null, array('class' =&amp;gt; 'disabled', 'tag' =&amp;gt; 'span', 'escape' =&amp;gt; false));?&amp;gt;&lt;br /&gt;  &amp;lt;?php ($paginator-&amp;gt;hasNext())?e($paginator-&amp;gt;last('&amp;amp;raquo;', array('class'=&amp;gt;'last','escape'=&amp;gt;false))):e('&amp;lt;span class="disabled"&amp;gt;&amp;amp;raquo;&amp;lt;/span&amp;gt;')?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;このエレメントを読み込むために、index.ctpのtableタグの前後に以下のタグを追記する。&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php e($this-&amp;gt;element('pager'))?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで以下のような画面になったはずだ。&lt;br /&gt;&lt;br /&gt;ページャが小さい？そんなものは好きにcssでサイズや位置を変えれば良い。そのくらいは自分でやりなされ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0j5r52gPnH8/TsnoAFvQaOI/AAAAAAAAEKE/AzqIanqBnk4/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://1.bp.blogspot.com/-0j5r52gPnH8/TsnoAFvQaOI/AAAAAAAAEKE/AzqIanqBnk4/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;さて、SearchPluginを導入する前に、もう少しだけ完璧に近づけておこうと思う。&lt;br /&gt;&lt;br /&gt;テーブルの項目名をクリックすると、降順/昇順を入れ替える機能がページャに含まれているので、それを実装してみようじゃないか。&lt;br /&gt;&lt;br /&gt;それとは別に、念の為、ページャにURLのGETパラメータをマージしてくれるおまじないも含めておこう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ビュー&lt;/b&gt;&amp;nbsp;/app/views/users/index.ctp&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php $paginator-&amp;gt;options(array('url' =&amp;gt; $this-&amp;gt;passedArgs)); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('searchForm'))?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('pager'))?&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('ID', 'User.id'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('ユーザ名', 'User.username'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('作成日', 'User.created'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;?php e($paginator-&amp;gt;sort('更新日', 'User.modified'))?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php foreach($users as $user):?&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['id'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['username'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['created'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;?php e($user['User']['modified'])?&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;?php endforeach?&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;?php e($this-&amp;gt;element('pager'))?&amp;gt;&lt;br /&gt;&lt;/pre&gt;1行目と8行目〜11行目が変更点だ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これでひと通り、SearchPluginを入れる準備が整った。&lt;br /&gt;&lt;br /&gt;試しに、ユーザIDに適当な文字を入力して検索してみて欲しい。&lt;br /&gt;&lt;br /&gt;検索語、入力したデータはフォームに残って入るが、ページャでページ移動すると、とたんに消えてしまうのがわかると思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これらの問題を一気に解決するため、次回からSearchPluginの具体的な実装をやってみたいと思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6533541827954794606?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6533541827954794606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6533541827954794606'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/11/cakephp13search-plugin12.html' title='CakePHP1.3にSearch Pluginをいれてラクラク検索しよう【1/2】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-LNT8X2UZxtM/TrDSoGpv_iI/AAAAAAAADyA/Ia_ebzI1rTk/s72-c/pager.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-4784358815228181241</id><published>2011-09-06T23:46:00.004+09:00</published><updated>2011-09-06T23:54:51.032+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='お洒落'/><category scheme='http://www.blogger.com/atom/ns#' term='シラサカショウ'/><category scheme='http://www.blogger.com/atom/ns#' term='JELLY JELLY CAFE'/><category scheme='http://www.blogger.com/atom/ns#' term='餅は餅屋'/><category scheme='http://www.blogger.com/atom/ns#' term='ピチカートデザイン'/><category scheme='http://www.blogger.com/atom/ns#' term='シラサカマイ'/><category scheme='http://www.blogger.com/atom/ns#' term='ノマド'/><category scheme='http://www.blogger.com/atom/ns#' term='交流'/><title type='text'>JELLY JELLY CAFEに行ってきた</title><content type='html'>時代はノマド。そう、職場に縛られる時代は終わった。&lt;br /&gt;一人ひとりが遊牧民。願望を込めてそう言ってみる。&lt;br /&gt;&lt;br /&gt;別に最先端の機材がそろっていて、おしゃれにデザインされたものをありがたがっているわけではない。ただ、今の俺にはノマドが大いに必要なのだ。&lt;br /&gt;&lt;br /&gt;とはいえ、必要だからといって、そこらのしょぼいものを追い求めてはいけない。&lt;br /&gt;それなりのクオリティが必要なんだ。&lt;br /&gt;&lt;br /&gt;モチベーションキーピング。立派なマネジメントだ。&lt;br /&gt;&lt;br /&gt;もう、まるで昭和初期が背景の邦画に出てくるような、いわゆる対向島型の古臭い職場は気持ちが悪くなる。せめてフリーアドレス制くらいは導入してもらいたいものだ。&lt;br /&gt;&lt;br /&gt;というわけで、しつこいようだがノマドである。&lt;br /&gt;ノマドするにはお気に入りの場所が必要だ。&lt;br /&gt;&lt;br /&gt;その場所だが、FACEBOOKでたまたま見かけたページで、レセプションがあるとのことなので、早速行ってきた。&lt;br /&gt;&lt;br /&gt;お店の名前は「&lt;a href="http://jellyjellycafe.com/"&gt;JELLY JELLY CAFE&lt;/a&gt;」。&lt;br /&gt;非常に洒落てる素敵なお店だ。&lt;br /&gt;&lt;br /&gt;運用はJELLY JELLY CAFEとなっているが、店長は&lt;a href="http://pizzdesign.com/"&gt;株式会社ピチカートデザイン&lt;/a&gt;の代表取締役&lt;a href="https://twitter.com/shoshirasaka"&gt;シラサカショウ&lt;/a&gt;氏の妹さん、シラサカマイさんである（本日は突然おじゃましたのに丁寧な対応していただき、ありがとうございました）。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;というわけで、いろいろレポートする次第。&lt;br /&gt;&lt;br /&gt;まず渋谷駅からの場合、井の頭通りをまっすぐNHK方面へ進み、右手に東急ハンズが見えたらそのまままっすぐ道なりに直進する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2U8Zz2U4SaQ/TmYthpurhjI/AAAAAAAADf0/3Du0tutn3KY/s1600/IMAG0320.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-2U8Zz2U4SaQ/TmYthpurhjI/AAAAAAAADf0/3Du0tutn3KY/s320/IMAG0320.jpg" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;はいー見えました見えました。JELLY JELLY CAFEの立て看板。&lt;br /&gt;この看板が見えたら右手の坂というか、階段を登るわけだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-sibnyUiz7dw/TmYtr9TB51I/AAAAAAAADf4/LLV_b5sTqck/s1600/IMAG0321.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://2.bp.blogspot.com/-sibnyUiz7dw/TmYtr9TB51I/AAAAAAAADf4/LLV_b5sTqck/s320/IMAG0321.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;階段を上がるとすぐに、また看板がある。&lt;br /&gt;建物には「のどか」という居酒屋の看板が掲げてあるが、壁を右側にそって進むことになる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hiIBwaQ20cs/TmYt9z4paAI/AAAAAAAADf8/1YtdIXYhl_A/s1600/IMAG0322.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://3.bp.blogspot.com/-hiIBwaQ20cs/TmYt9z4paAI/AAAAAAAADf8/1YtdIXYhl_A/s320/IMAG0322.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;おぉ、もう着いてしまった。扉はすでに開いている。&lt;br /&gt;&lt;br /&gt;ここをくぐるともはや、知らない人がたくさんいるわけだ。&lt;br /&gt;Twitterで1回だけ話した人とか、Facebookで知り合いの知り合いの知り合いの知り合いで一度も話ししたことない人とか、そんな人達が参加しているに違いない。&lt;br /&gt;&lt;br /&gt;そして何しろ今日はレセプション最終日。どんな強敵が凄んでいるかもしれぬ。&lt;br /&gt;&lt;br /&gt;気を引き締めていかなければ。そしてもう後戻りはできないが、そもそも後戻りしようとも思わないので、いっそ軽い気持ちで入店してみる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zc37HEKJ9AI/TmYuRu1OewI/AAAAAAAADgA/xB-I9Ft-43g/s1600/IMAG0323.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://2.bp.blogspot.com/-zc37HEKJ9AI/TmYuRu1OewI/AAAAAAAADgA/xB-I9Ft-43g/s320/IMAG0323.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;入って右手にはプロジェクタで愉快な映像が流れていた。&lt;br /&gt;ここ薄暗いからちょうどよいよね。コンパクトにまとまってて非常にナイス。&lt;br /&gt;そしてソファも座り心地よさそうだ。&lt;br /&gt;&lt;br /&gt;一旦カウンタで店長のシラサカマイさんにビールいただき、名刺交換など。&lt;br /&gt;コロナを頂いた。コロナ好きなんだよ。美味いんだよ。&lt;br /&gt;そのまま飲むとウゲゲ！だけど、ライム入れるとヒャッハー！だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xS_iAqdE9t0/TmYueTQmTfI/AAAAAAAADgE/BsDaZO0O_UQ/s1600/IMAG0324.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://4.bp.blogspot.com/-xS_iAqdE9t0/TmYueTQmTfI/AAAAAAAADgE/BsDaZO0O_UQ/s320/IMAG0324.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;店内を撮影してみた。フラッシュたいたので少し明るいが、実際にはもっと暗い感じ。&lt;br /&gt;&lt;br /&gt;そして写真左手のハンチング、&lt;a href="https://twitter.com/kaz_29"&gt;@kaz_29&lt;/a&gt;さんでした。&lt;br /&gt;以前一度飲み会でご一緒させて頂きましたが久しぶりのご対面。&lt;br /&gt;最初気づかずすいませんでした。&lt;br /&gt;&lt;br /&gt;よく見ると右手奥にはシラサカ氏が！&lt;br /&gt;今日は挨拶できなかったので残念。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Q07RbTplbZc/TmYwvj_Gr3I/AAAAAAAADgM/0uqIFuNP7i4/s1600/IMAG0325.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Q07RbTplbZc/TmYwvj_Gr3I/AAAAAAAADgM/0uqIFuNP7i4/s320/IMAG0325.jpg" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;テーブル席にすわってふと横を見ると、なにやらiPadらしきものを置くオーディオっぽい何かが置いてあった。&lt;br /&gt;そして下にはルータらしきものが。間違えて蹴ってはいけない。&lt;br /&gt;&lt;br /&gt;その後このテーブル席で、芸能関係の方とも名刺交換し、盛り上がった。&lt;br /&gt;&lt;br /&gt;そしてしばらくいろいろな人と交流していると、なんとカードゲームが始まった。&lt;br /&gt;トランプ的なカードで大富豪をやることになったんだけど、一緒にプレイした人たちが適度に酔ってて非常に面白かった。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UJB5kgebjK8/TmYxPOP3mcI/AAAAAAAADgQ/7wFRzcSOVmQ/s1600/IMAG0327.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://2.bp.blogspot.com/-UJB5kgebjK8/TmYxPOP3mcI/AAAAAAAADgQ/7wFRzcSOVmQ/s320/IMAG0327.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;あまりに面白いので集合写真を取らせていただいた。&lt;br /&gt;&lt;br /&gt;一番左が俺。一番右の愉快な方が、名刺いただけてないので詳しくはわからないけど、やっぱりかなり愉快な方でした。&lt;br /&gt;&lt;br /&gt;というわけで、非常に愉快に楽しくお酒が飲めましたとさ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて問題のノマドだけど、レセプションでノマドは無理だね。&lt;br /&gt;&lt;br /&gt;だからまた、JELLY JELLY CAFEに足を運ぶことにしてある。安心されたし。&lt;br /&gt;&lt;br /&gt;みんなもこんなブログ記事よんでないで、速く足を運ぶと良いよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-4784358815228181241?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4784358815228181241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4784358815228181241'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/09/jelly-jelly-cafe.html' title='JELLY JELLY CAFEに行ってきた'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-2U8Zz2U4SaQ/TmYthpurhjI/AAAAAAAADf0/3Du0tutn3KY/s72-c/IMAG0320.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6575924100866563941</id><published>2011-08-30T15:48:00.004+09:00</published><updated>2011-08-30T16:07:35.708+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンジニア'/><category scheme='http://www.blogger.com/atom/ns#' term='デザイナ'/><category scheme='http://www.blogger.com/atom/ns#' term='コワーキング'/><category scheme='http://www.blogger.com/atom/ns#' term='ノマド'/><category scheme='http://www.blogger.com/atom/ns#' term='コラボ'/><title type='text'>Webエンジニアとは？</title><content type='html'>個人的にここ10年くらいのWeb業界を経て思ったことをまとめてみようと試みる。&lt;br /&gt;思いつきを温めて考慮して考えてアイデアにしてみた。&lt;br /&gt;ただしまだ決定ではないのであしからず。&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_9066571" style="margin: 0 auto; width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ogaaaan/web-9066571" target="_blank" title="オガーンの頭の中『Webエンジニアとは』"&gt;オガーンの頭の中『Webエンジニアとは』&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9066571" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ogaaaan" target="_blank"&gt;Seiji Ogawa&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;※自分で読んでも理解に少し時間がかかるかな、と言う部分もなくはない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■アナタの肩書きなんかより責任の所在の方が大事&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;例えばWebデザイナが原稿をもらってそれをコピペする。&lt;br /&gt;原稿に誤字脱字があったとする。当然、デザイナは直しちゃいけないよね。&lt;br /&gt;新しく、修正された原稿をもらうべき。&lt;br /&gt;&lt;br /&gt;これは、もしライターでもないデザイナが文章を編集してしまった場合、その文章が後に問題になった場合など、デザイナにも責任が及んでしまうから。&lt;br /&gt;&lt;br /&gt;つまりアセットとしてテキストデータをもらいはするけど、エンティティとして内容には触れてはいけない、ということだ。&lt;br /&gt;&lt;br /&gt;しかし、これはデザイナ、ライターという「肩書き」があるからこうなっているだけで、本来はこの責任範囲というのが大事なんではないかと。&lt;br /&gt;&lt;br /&gt;つまり「ジョブタイトルとしてはデザイナーだけど、エンティティはライターとして責任持つよ」ということが絶対にできない状態であるという意味。&lt;br /&gt;&lt;br /&gt;ゲームでいうと、魔法を使えない戦士は死ぬまで戦士。&lt;br /&gt;転職もできず、新しいスキルを身につけることもできず、ただ淡々と壁になって物理攻撃をするだけということになる。&lt;br /&gt;&lt;br /&gt;戦士だろうが途中で僧侶の呪文覚えたっていいじゃないか。&lt;br /&gt;例えばソロプレイだったら、回復呪文なかったらアウトだし。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■できるなら今アンタがやるべきでしょ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;もしあなたがいわゆるWebデザイナだとする。&lt;br /&gt;面接にきた若手デザイナが「ボクはGIFが嫌いなので、全部JPEGで作ります」とか言い出したら殴りたくなるだろう。&lt;br /&gt;&lt;br /&gt;「だってGIFって汚いんですよ。」&lt;br /&gt;「GIFってまだ使ってる人いるんですか？キモ！」&lt;br /&gt;「GIFで写真画像なんか絶対無理！」&lt;br /&gt;&lt;br /&gt;まぁ、俺でも殴るわな。&lt;br /&gt;&lt;br /&gt;しかし、&lt;br /&gt;&lt;br /&gt;「JavaScript？俺はWebデザイナですよ！？」&lt;br /&gt;「なんで俺がjQuery覚えなくちゃいけないの？」&lt;br /&gt;と言ってしまうデザイナも、&lt;br /&gt;&lt;br /&gt;「なんかカッチョいいアイコンない？」&lt;br /&gt;「かっこいいfavicon作って」&lt;br /&gt;「俺センスないから画像とか無理」&lt;br /&gt;と言ってしまうプログラマも、&lt;br /&gt;&lt;br /&gt;同じではないか？&lt;br /&gt;&lt;br /&gt;何が違うのかというとただ、やりたくない理由の粒度と程度が違うだけだ。&lt;br /&gt;&lt;br /&gt;自分の何がそうさせているのかは不明だが、無理やり自分のスキルの範囲を狭めてどうするんだろうと思う。&lt;br /&gt;&lt;br /&gt;責任範囲は決めたほうが良い。ビジネス的にクライアントを納得することもできるし、何より精神衛生上、楽な気持ちでプロジェクトに励めるからだ。&lt;br /&gt;&lt;br /&gt;しかし、スキルに上限を設けるのはどうだろうか。&lt;br /&gt;新しいスキルを覚えると、今まで見えてこなかったモノが見えてくるのは言うまでもない。&lt;br /&gt;そしてIT業界Web系では、そういったドッグイヤー（日進月歩）を遙かに超えたラットイヤー（秒進分歩）という激しい進み方をしているわけで、スキルアップを諦めた奴から脱落していくものである。&lt;br /&gt;&lt;br /&gt;スキルを止める、スキルアップしない、というのは、IT業界では死を表すものではないだろうか。&lt;br /&gt;&lt;br /&gt;もしあなたが以前1度だけでもjQueryのプラグインを作ったことがあるというPhotoshop使いであれば、プログラマがいないときにはあなたがプラグインを作れるではないか。&lt;br /&gt;&lt;br /&gt;毎日オートミールしか作らない妻より、オリエンタルに何でも作れる妻のほうが旦那は好きだし大事にするってもんである。&lt;br /&gt;※当然、企業側もそうするべきである&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■情報共有こそがコラボの唯一の方法&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;集中するにはやはり一人でいるのが良いだろう。&lt;br /&gt;&lt;br /&gt;例えばそれが、極めてうるさいファミレスでも、滝の横で読書したとしても、遠足のために電車に乗り込んできた小学生の集団と同じ車両であっても、あなたが一人で行動しているなら、それは集中を求めての行動と言える。&lt;br /&gt;&lt;br /&gt;そう考えると自分が仕事を能率よくこなすためのスタイルというのは非常に大事にしなければならないことに気がつくはずだ。&lt;br /&gt;&lt;br /&gt;しかし、一人で仕事はできても、ビジネスは進まない。&lt;br /&gt;相手があってこそのビジネスだ。&lt;br /&gt;&lt;br /&gt;そうなると、自分のスタイルを崩さず、相手と連絡を取るという方法が要求されるが、すでに今の時代はコラボレーションツールが大量に存在するからもう大丈夫だ。&lt;br /&gt;&lt;br /&gt;中には有料のものもあるが、基本的にブログでも何でもよい。&lt;br /&gt;誰かが書いた。誰かが見た。&lt;br /&gt;の繰り返しで、すでに情報共有ができているではないか。&lt;br /&gt;&lt;br /&gt;つまり一箇所に集まるのは、仕事以外の理由でしかない、ということだ。&lt;br /&gt;顔が見たい、寂しい、など。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;逆に、たとえ毎日顔を合わせるようなスタイルを全員が好んでいるとしても、コラボレーションツールは重宝するべきである。&lt;br /&gt;&lt;br /&gt;何しろTPO問わず確認することができるのだから。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■バランス重視で健全に働く&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;幾ら仕事が楽しいとは言え、なんでもやり過ぎはNGである。&lt;br /&gt;特にあなたに大事なステディがいたり、子供の誕生日が近いのであればなおさらだ。&lt;br /&gt;&lt;br /&gt;仕事は仕事、家族は家族、個人は個人、時間を決めて行動しよう。&lt;br /&gt;これはいろいろな効果がある。例えば、&lt;br /&gt;&lt;br /&gt;今日はここまでやればOK！と決め、それを毎日やるだけでプロジェクトが進む。&lt;br /&gt;いちいち全体を俯瞰する必要がない。&lt;br /&gt;&lt;br /&gt;当然最初にバッチリプロジェクトのタスクを分けておく必要はあるが、それほど大した作業じゃない。&lt;br /&gt;&lt;br /&gt;それから決まりきったことをやるというのは、酔っ払っていてもある程度できるという柔軟性を産む。&lt;br /&gt;&lt;br /&gt;脳みそが完全にオブジェクト指向になっている人は、飲めない酒を呑んで酔ってしまっても、余りバグの無いコードを書くことが可能だ。都市伝説かもしれないが、その傾向自体は存在する。&lt;br /&gt;&lt;br /&gt;当然物理的に手足が動かない状態まで酔ってしまったら終わりだが。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■最後に&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;働きたい人が働きたいスタイルで、働きたいと思う仕事場で働く、というのはすごく理想ではないか？&lt;br /&gt;&lt;br /&gt;当然、ただ漠然にノマドでコワーキング！とか叫んでもNGだ。&lt;br /&gt;ノマドでコワーキングは素敵だが、それを行ったとしてもコスト的に問題がないくらいのスキルが重要なのは言うまでもない。&lt;br /&gt;&lt;br /&gt;ノマドしている大人に憧れてIT業界を選んだ人もいるかもしれない。&lt;br /&gt;それはそれで悪くはないが、あまり実の無いミーハースタイルならIT業界への就職はしないほうが好い。&lt;br /&gt;調子にのって、恩を仇で返すようなダメな大人になってしまうだろう。たいてい起業したあとにね。&lt;br /&gt;&lt;br /&gt;そういう意味ではスキルがない人、スキルアップしようとしない人は、無免許運転で事故を起こして、その後怖くなって逃げるのと同じだ。&lt;br /&gt;&lt;br /&gt;幸いにもWeb業界に免許はないが、スキルという見えない免許、しかもすでに持ってる奴は目を見るだけで他人の免許が見えるわけで、そこら辺バッチリ意識して働いていこうと思う。&lt;br /&gt;&lt;br /&gt;いろいろ意識することは大事だ。&lt;br /&gt;今回の記事も、自分の理想と現実を比べてみて、こういうのがいいのではないか？と机上の空論になっても良いというのが前提で作ってみた。&lt;br /&gt;&lt;br /&gt;みなさんもどうだろうか。無意識当たり前を一旦取っ払ってみるのは。&lt;br /&gt;多分、常識を知っている非常識は、強いはず。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6575924100866563941?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6575924100866563941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6575924100866563941'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/08/web.html' title='Webエンジニアとは？'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6237611445681897848</id><published>2011-08-23T17:48:00.006+09:00</published><updated>2011-08-24T20:55:41.459+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='コ・ワーキング'/><category scheme='http://www.blogger.com/atom/ns#' term='ケツ'/><category scheme='http://www.blogger.com/atom/ns#' term='ノマド'/><category scheme='http://www.blogger.com/atom/ns#' term='ストーカー'/><category scheme='http://www.blogger.com/atom/ns#' term='ギャル'/><category scheme='http://www.blogger.com/atom/ns#' term='原宿'/><category scheme='http://www.blogger.com/atom/ns#' term='THE TERMINAL'/><title type='text'>THE TERMINALへ行ってきた</title><content type='html'>あなたはTHE TERMINALを知っているだろうか？&lt;br /&gt;&lt;br /&gt;知らないのであれば知れば良い。&lt;br /&gt;こちらがTHE TERMINAL。&lt;br /&gt;&lt;a href="http://theterminal.jp/"&gt;http://theterminal.jp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;サイトのABOUTから引用すると、&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;ターミナルってどんな場所ですか?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;インターネットできます。&lt;br /&gt;電源使えます。&lt;br /&gt;コピーとれます。&lt;br /&gt;プレゼンできます。&lt;br /&gt;打ち合わせできます。&lt;br /&gt;待ち合わせもできます。&lt;br /&gt;本読めます。&lt;br /&gt;音楽聴けます。&lt;br /&gt;パニーニ食べられます。&lt;br /&gt;コーヒー飲めます。&lt;br /&gt;ビールも飲めます。&lt;br /&gt;屋上でタバコ吸えます。&lt;br /&gt;24時間営業しています。&lt;br /&gt;みなさまのご来店をお待ちしております。&lt;/blockquote&gt;ということになっている。&lt;br /&gt;いわばコ・ワーキング可能なノマドスタイルの場、ということでOK。&lt;br /&gt;&lt;br /&gt;ちょっとした打合せがあったので、会社休んで原宿までひとっ飛び。&lt;br /&gt;若干行き過ぎてしまったので後戻りしたんだが、それほど迷わず到着。&lt;br /&gt;&lt;br /&gt;明治通り沿いかとおもってたけど、1本内側の道だった。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-e5_-DQMHrEI/TlNlqEFwWyI/AAAAAAAADRs/a4y5acZk4tA/s1600/IMAG0313.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-e5_-DQMHrEI/TlNlqEFwWyI/AAAAAAAADRs/a4y5acZk4tA/s320/IMAG0313.jpg" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このビルの3F。1Fは服飾系のショップ。&lt;br /&gt;早速中に入ろうと思ったら、仲間の後輩（パダ・ワン）が出迎えてくれた。&lt;br /&gt;&lt;br /&gt;いいなぁいいなぁパダ・ワンいいなぁ。&lt;br /&gt;&lt;br /&gt;そう言えば俺にも昔、パダ・ワンがいたよ。&lt;br /&gt;でも傷負い人になっちまったようで、俺の元からはいなくなっちまった。&lt;br /&gt;&lt;br /&gt;まぁよい。&lt;br /&gt;&lt;br /&gt;早速中にはいってみたら、学校の教室の4/5くらいのスペースで、作りたての木の匂い。&lt;br /&gt;ところどころ安い素材を使ってるから毛羽立ってるところもあるけど、全体的には居心地良さそう。&lt;br /&gt;&lt;br /&gt;建物自体が少し奥まってるから、3Fの窓側でも喧騒からはかなり距離がある。&lt;br /&gt;今回は3人だったのでテーブル席を陣取った。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hFfwKsg1wsY/TlNmq3S3xTI/AAAAAAAADR0/nyY_0AcARfY/s1600/IMAG0311.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://4.bp.blogspot.com/-hFfwKsg1wsY/TlNmq3S3xTI/AAAAAAAADR0/nyY_0AcARfY/s320/IMAG0311.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;スペースの真ん中にはドカンとデカいテーブルが。&lt;br /&gt;そしてiMacが置いてある。これはたぶん有料なんだろうな。&lt;br /&gt;&lt;br /&gt;写真を見てもらえばわかるが、俺達のいるテーブル席にすわった状態で、この長テーブル側をみると、女性のスカートの中が見えるポジションとなるので、女性はスカート履いてこの長テーブルには座らないほうが良いと思った。&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;※お店側にもこの対策はとっていただきたく思う&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;俺はそのおかげで少しだけ、良い思いをさせてもらったので、3日ほど機嫌が良いと思う。&lt;br /&gt;&lt;br /&gt;さて、このTHE TERMINALだけど、会員の入会が150円。あとは3時間で1,050円。合計で初回は1,200円かかるが、ジュース飲み放題。コンセントも至るところに用意されている。&lt;br /&gt;予めネットで仮会員登録してから行くと、番号見せるだけでOK。これは楽だった。&lt;br /&gt;&lt;br /&gt;仲間の二人はMacBookAirを持ってきていたんだけど、小さいねぇ、MacBookAir。特にパダ・ワンのノートは11インチということで、更に小さくステキ度アップ。ウホ！&lt;br /&gt;&lt;br /&gt;そして俺のノートは15インチ（だったかな？）で重さが4〜5kgほどある、HPのPavilionシリーズ。さすがにこういう場では少し浮いてる感があるが、そもそも俺はノートPCが重くても苦じゃないし、出来ればでかい方が作業しやすいから良い。&lt;br /&gt;テーブルをほとんど占拠しちゃったくらいで済んだ。&lt;br /&gt;&lt;br /&gt;途中、仲間のパダ・ワンが仕事のため退場し、仲間と二人で話をじゃんじゃん進めた。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gOC33Jg3HCU/TlNn6ngzkRI/AAAAAAAADR8/nBDEWtO4vSs/s1600/IMAG0312.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-gOC33Jg3HCU/TlNn6ngzkRI/AAAAAAAADR8/nBDEWtO4vSs/s320/IMAG0312.jpg" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;いろいろ話も弾んで、今後の対策などなんとなく決まってきたので、今日中にまとめる予定。&lt;br /&gt;&lt;br /&gt;そして今日来れたら来るはずだった別の仲間（デザイン会社の取締役）は来れず、3時間で一旦お開きに。&lt;br /&gt;&lt;br /&gt;仲間は仕事があるので、そこで解散。俺はそのまま渋谷まで歩こうかと思ったが、前を歩くギャルのケツが素敵すぎて5分ほど後をつけていたら、原宿駅についてしまったので、原宿から帰ったよ。&lt;br /&gt;&lt;br /&gt;さて感想だけど、&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue; font-size: x-large;"&gt;また行きてぇ！！&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;だ。ミーハーを嫌う俺がまたいきたいと言っている。&lt;br /&gt;&lt;br /&gt;まぁ仲間と一緒だったからってのもあるとおもうけど、良かった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6237611445681897848?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6237611445681897848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6237611445681897848'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/08/terminal.html' title='THE TERMINALへ行ってきた'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-e5_-DQMHrEI/TlNlqEFwWyI/AAAAAAAADRs/a4y5acZk4tA/s72-c/IMAG0313.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-4391232109306642004</id><published>2011-08-22T23:53:00.003+09:00</published><updated>2011-08-24T20:56:00.507+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zen-coding'/><category scheme='http://www.blogger.com/atom/ns#' term='gedit'/><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='Regexxer'/><category scheme='http://www.blogger.com/atom/ns#' term='RabbitVCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Regex'/><category scheme='http://www.blogger.com/atom/ns#' term='Nautilus'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='Poedit'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Linuxを使ったWeb開発環境を手早く構築する【3/3】</title><content type='html'>最終回。&lt;br /&gt;まずはエディタの設定を行おう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■geditでZen Coding&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まずはプラグインを入れる場所を作る。&lt;br /&gt;端末で、今ログインしているユーザで以下を実行。&lt;br /&gt;&lt;pre class="html" name="code"&gt;% mkdir -p ~/.gnome2/gedit/plugins&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次にプラグインをダウンロードしてくる。&lt;br /&gt;ダウンロード元はこちら。&lt;br /&gt;&lt;a href="http://github.com/mikecrittenden/zen-coding-gedit"&gt;http://github.com/mikecrittenden/zen-coding-gedit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;解凍して出来たフォルダ、ファイルを、先程作ったフォルダに移動する。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;zencoding ディレクトリ&lt;/li&gt;&lt;li&gt;zencoding.gedit-plugin&lt;/li&gt;&lt;/ul&gt;の2つだ。&lt;br /&gt;&lt;br /&gt;次にgeditを起動し、「編集」＞「設定」＞「プラグイン」を開き、「Zen Coding」にチェックを入れて「閉じる」ボタンで閉じよう。&lt;br /&gt;&lt;br /&gt;さて、試しになにか試してみよう。&lt;br /&gt;tableタグ直下にtr、その直下にthを1個、tdを2個、という設定だ。css3のセレクタ的に書けば良い。&lt;br /&gt;&lt;pre class="html" name="code"&gt;table&amp;gt;tr&amp;gt;th*1+td*2&lt;br /&gt;&lt;/pre&gt;この状態で改行せず、「CTRL」＋「E」をタイプしてみると、&lt;br /&gt;&lt;pre class="html" name="code"&gt;&amp;lt;table&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;と表示される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mjR0eF1g9y4/TlJnyDGJPgI/AAAAAAAADQo/VnetrNrGXZw/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/-mjR0eF1g9y4/TlJnyDGJPgI/AAAAAAAADQo/VnetrNrGXZw/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Zen Codingに関しては書籍が出ているので購入してみても良いと思う。&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=ogaiii-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=4844329456" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■geditで正規表現検索、正規表現置換&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;geditは使い勝手が良いくせに、正規表現での置換ができない。&lt;br /&gt;そのためプラグインを入れる必要がある。&lt;br /&gt;&lt;br /&gt;まず以下のサイトへ進み、文中の「Download」からプラグインをダウンロードする。&lt;br /&gt;&lt;a href="http://halfhourhacks.blogspot.com/2008/03/gedit-regular-expression-plugin.html"&gt;http://halfhourhacks.blogspot.com/2008/03/gedit-regular-expression-plugin.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;解凍したプラグインの、フォルダとファイルを~/.gnome2/gedit/pluginsに設置する。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;regex_replace ディレクトリ&lt;/li&gt;&lt;li&gt;regex_replace.gedit-plugin&lt;/li&gt;&lt;/ul&gt;の2つだ。&lt;br /&gt;&lt;br /&gt;次にgeditを起動し、「編集」＞「設定」＞「プラグイン」を開き、「Regex Search and Replace」にチェックを入れて「閉じる」ボタンで閉じよう。&lt;br /&gt;&lt;br /&gt;実際に使う場合、「検索」＞「Regular Expression...」を選択すれば、正規表現での検索/置換が可能になる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UfiGO1lLOPg/TlJoXgXFf4I/AAAAAAAADQs/3dEkB8WQzmc/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-UfiGO1lLOPg/TlJoXgXFf4I/AAAAAAAADQs/3dEkB8WQzmc/s320/Screenshot-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Nautilusにバージョン管理機能をつける&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Windowsで言う所のTortoiseSVN的なVCSを使うため、RabbitVCSをインストールする。&lt;br /&gt;インストールはyumで「rabbitvcs」を検索すればOK。&lt;br /&gt;&lt;br /&gt;インストールが終わったら念の為ログインしなおしたほうが良い。&lt;br /&gt;何かのファイルやフォルダなどを右クリックすると、「Rabbit SVN」と「Rabbit Git」が選択できる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_0r7JHd7rFM/TlJpC7uor6I/AAAAAAAADQw/6VO2Bkyi3xo/s1600/Screenshot-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-_0r7JHd7rFM/TlJpC7uor6I/AAAAAAAADQw/6VO2Bkyi3xo/s320/Screenshot-2.png" width="253" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■NetBeansのインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;NetBeansはIDEだ。以前まではeclipseを使っていたのだが、NetBeansを使えば、その安定性に驚くだろう。&lt;br /&gt;ちなみにJavaの環境が入っていないと、インストールしても使えないので、最初にJDKをインストールする。&lt;br /&gt;&lt;br /&gt;JDKはここからダウンロードする。&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NetBeansダウンロードはここから。&lt;br /&gt;&lt;a href="http://netbeans.org/downloads/?pagelang=ja"&gt;http://netbeans.org/downloads/?pagelang=ja&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ダウンロード可能なエディションは&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java SE&lt;/li&gt;&lt;li&gt;Java EE&lt;/li&gt;&lt;li&gt;C/C++&lt;/li&gt;&lt;li&gt;PHP&lt;/li&gt;&lt;li&gt;すべて&lt;/li&gt;&lt;/ul&gt;から選択できる。&lt;br /&gt;適切なものをダウンロードしよう。&lt;br /&gt;※ダウンロード後もメニューからプラグイン追加で別のエディションと同じにできるので、よくわからなかったら「Java EE」でいいと思う。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-QELaLRRXCew/TlJpY7YvIVI/AAAAAAAADQ0/8CL_EVlgyjk/s1600/Screenshot-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://3.bp.blogspot.com/-QELaLRRXCew/TlJpY7YvIVI/AAAAAAAADQ0/8CL_EVlgyjk/s320/Screenshot-3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードはシェル形式になっている。&lt;br /&gt;ダウンロードしたファイルを右クリックでプロパティを開き、「アクセス権」タブを開こう。&lt;br /&gt;その中にある「実行：プログラムとして実行できる」にチェックをいれ、「閉じる」ボタンで閉じる。&lt;br /&gt;これでダウンロードしたインストーラをダブルクリックして実行させることができた。&lt;br /&gt;早速ダブルクリックして実行しよう。&lt;br /&gt;&lt;br /&gt;「端末内で実行する」「表示する」「キャンセル」「実行する」&lt;br /&gt;の4つのボタンが表示されるので、「実行する」を選択しよう。&lt;br /&gt;&lt;br /&gt;あとは自動的にNetBeansのインストールウィザードが開始される。&lt;br /&gt;&lt;br /&gt;インストールが終わったあと、NetBeansのフォントが汚すぎるのがわかったと思う。本当にひどい表示だ。&lt;br /&gt;しかし回避方法がすでに用意してある。&lt;br /&gt;&lt;br /&gt;まずはフォントフォルダに使いたいttfが用意されているかどうかを確認する。&lt;br /&gt;/usr/share/fonts/japanese/TrueType/&lt;br /&gt;japanese/TrueTypeは自分で作らないと存在しないので、なければつくろう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mkdir -p /usr/share/fonts/japanese/TrueType/&lt;br /&gt;&lt;/pre&gt;つくったら、任意のttfをここに置けばOK。&lt;br /&gt;おすすめはMiguフォントの2Mだ。&lt;br /&gt;&lt;br /&gt;そしてJava仮想マシンであるJVMが読み込むフォントのフォルダに、ttfのシンボリックリンクを貼れば良い。&lt;br /&gt;&lt;br /&gt;JVMは、以下にあるttfを優先して表示しようとしてくれる。&lt;br /&gt;/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/fonts/fallback&lt;br /&gt;※Javaのバージョンは要確認&lt;br /&gt;&lt;br /&gt;fonts/fallbackは自分で作らないと存在しないので、なければつくろう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mkdir -p /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/fonts/fallback&lt;br /&gt;&lt;/pre&gt;フォルダを作ったら、中に移動し、フォントフォルダからシンボリックリンクを張る。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# cd /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/fonts/fallback&lt;br /&gt;# ln -s /usr/share/fonts/japanese/TrueType/Migu-2M-bold.ttf .&lt;br /&gt;# ln -s /usr/share/fonts/japanese/TrueType/Migu-2M-regular.ttf .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでフォントの準備ができたので、次はNetBeansの設定ファイルを編集する。&lt;br /&gt;デフォルトだとアンチエイリアスが効いてない状態でフォントを表示してしまうので、その設定と、インタフェースが全体的にフォントサイズが小さいので、それの設定もしてしまおう。&lt;br /&gt;&lt;br /&gt;設定ファイルはホームフォルダに「netbeans-7.0.1」などの名前で設置されているので、&lt;br /&gt;/home/＜ユーザ名＞/netbeans-7.0.1/etc/netbeans.conf&lt;br /&gt;を開こう。&lt;br /&gt;&lt;br /&gt;6行目あたりに、「netbeans_default_options」という設定項目があり、中身はダブルクオートでくくられたパラメータになっている。&lt;br /&gt;&lt;br /&gt;このパラメータの最後に、以下のパラメータを追記する。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;-J-Dawt.useSystemAAFontSettings=on -J-Dfile.encoding=UTF-8 --fontsize 14&lt;br /&gt;&lt;/pre&gt;つまりこの行はこういう形になるはずだ。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dawt.useSystemAAFontSettings=on -J-Dfile.encoding=UTF-8 --fontsize 14"&lt;br /&gt;&lt;/pre&gt;編集が済んだらNetBeansを起動しよう。&lt;br /&gt;デスクトップにショートカットアイコンができているはずなので、それをダブルクリックするか、「アプリケーション」＞「プログラミング」からNetBeansを起動してみると、綺麗なフォントで表示さたのがわかると思う。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Poeditをインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Poeditとは、i18nなどで使うpotファイル、poファイル、moファイルなどを生成できる、翻訳用のエディタだ。&lt;br /&gt;&lt;br /&gt;Gettext形式の国際化が可能なフレームワーク（CakePHP、Symfonyなど）でi18nを使うなら、ほぼ必須と言ってよいだろう。&lt;br /&gt;&lt;br /&gt;間違ってもExcelなどで翻訳依頼はしないほうが良い。地獄を見ることになる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2-ieRGf71kg/TlJqT3P1TWI/AAAAAAAADQ8/Fo13fWcRa_U/s1600/Screenshot-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://2.bp.blogspot.com/-2-ieRGf71kg/TlJqT3P1TWI/AAAAAAAADQ8/Fo13fWcRa_U/s320/Screenshot-4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールはyumexで「poedit」で検索すればすぐに出てくる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Regexxerをインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;例えば、指定したフォルダ内の指定したファイルパターンにマッチしたファイルに記述されているメールアドレスを一括で引っ張ってきたい、もしくは一括で置換したい、なんていうことができるGUIアプリだ。&lt;br /&gt;&lt;br /&gt;Windowsで言えば、DREAMHIVE社の「GrepReplace」的な存在である。&lt;br /&gt;一度使うと手放せない。&lt;br /&gt;&lt;br /&gt;インストールはyumexで「regexxer」で検索すればすぐに出てくる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OvF0CmPLQpM/TlJtUsnJWHI/AAAAAAAADRQ/VO2mcF9Cn-I/s1600/Screenshot-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://1.bp.blogspot.com/-OvF0CmPLQpM/TlJtUsnJWHI/AAAAAAAADRQ/VO2mcF9Cn-I/s320/Screenshot-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■最後に&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;LinuxでWeb開発するという、Windowsとは違ったアプローチでざっくりと俯瞰してみた。&lt;br /&gt;実際に使ってみて、今の環境とどっちが自分に合っているか、探ってみるのも良いかもしれない。&lt;br /&gt;&lt;br /&gt;ここで紹介しただけではなく、他にもたくさん便利なツールは存在するが、都合でここまでとする。&lt;br /&gt;&lt;br /&gt;というわけで終わり。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-4391232109306642004?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4391232109306642004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4391232109306642004'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/08/linuxweb33.html' title='Linuxを使ったWeb開発環境を手早く構築する【3/3】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-mjR0eF1g9y4/TlJnyDGJPgI/AAAAAAAADQo/VnetrNrGXZw/s72-c/Screenshot.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-8268836480865987554</id><published>2011-08-22T16:20:00.098+09:00</published><updated>2011-11-15T10:24:28.136+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='ローカル'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='BIND'/><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='リゾルバ'/><category scheme='http://www.blogger.com/atom/ns#' term='ゾーンファイル'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Linuxを使ったWeb開発環境を手早く構築する【2/3】</title><content type='html'>さて今回はバックエンドの構築ということで、前回インストールしたApache、php、MySQL、Postfix、BINDの設定を中心に説明したいと思う。&lt;br /&gt;&lt;br /&gt;繰り返しになるが、あくまで俺が何度も試してみた結果でしかないので、これが正解というわけではないことを断っておく。&lt;br /&gt;&lt;br /&gt;ただ、Linuxを基礎から覚えたい！Webの仕組みを1から網羅したい！という人だけではないとおもうし、必要に迫られてググってたどり着いた人も多いとおもうので、なるべくかいつまんで説明する予定だ。&lt;br /&gt;&lt;br /&gt;ただしかいつまむと言ってもさすが俺のことだ。DNSの部分など、可能な限り、「AするとBになる」という因果関係だけで終わらせるのは避け（これは俺の大嫌いなパターン）「AするとBになるのはCだから」まで掘り下げて書こうと思っている。しかしくどくならないように、全体的にはさっぱりサラサラのサラサーティ且つ、ダウニー的爽やかさを醸し出せるように意識して書いたつもりだ（おい、怒るな！）。&lt;br /&gt;&lt;br /&gt;ちなみにLinuxのホスト名をtorhamzedd.comとし、ドメインもtorhamzedd.comとするのを前提として説明する。&lt;br /&gt;&lt;br /&gt;というわけで早速いってみよう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Apacheの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;設定ファイルは予めバックアップを取っておく。&lt;br /&gt;端末でrootになり、以下のようにしてコピーしておこう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# cd /etc/httpd/conf/&lt;br /&gt;# cp httpd.conf httpd.conf.20110822&lt;br /&gt;&lt;/pre&gt;それでは早速中身をいじり倒す。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi httpd.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;設定項目&lt;/th&gt;&lt;th&gt;変更前&lt;/th&gt;&lt;th&gt;変更後&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;ServerLimit&lt;/th&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;MaxClients&lt;/th&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;MaxRequestsParChild&lt;/th&gt;&lt;td&gt;4000&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;ServerTokens&lt;/th&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;Prod&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;ServerName&lt;/th&gt;&lt;td&gt;www.example.com:80&lt;/td&gt;&lt;td&gt;torhamzedd.com:80&lt;br /&gt;＜コメントを外す＞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Options&lt;/th&gt;&lt;td&gt;FollowSymLinks&lt;/td&gt;&lt;td&gt;Includes ExecCGI FollowSymLinks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;AllowOverride&lt;/th&gt;&lt;td&gt;None&lt;/td&gt;&lt;td&gt;All&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;ServerSignature&lt;/th&gt;&lt;td&gt;On&lt;/td&gt;&lt;td&gt;Off&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;AddDefaultCharset&lt;/th&gt;&lt;td&gt;UTF-8&lt;/td&gt;&lt;td&gt;UTF-8&lt;br /&gt;＜コメントを外すだけ＞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;AddHandler cgi-script &lt;/th&gt;&lt;td&gt;.cgi&lt;/td&gt;&lt;td&gt;.cgi .pl&lt;br /&gt;＜コメントを外す＞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;NameVirtualHost&lt;/th&gt;&lt;td&gt;*:80&lt;/td&gt;&lt;td&gt;*:80&lt;br /&gt;＜コメントを外すだけ＞&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;LanguagePriority&lt;/th&gt;&lt;td&gt;en ca･･･&lt;/td&gt;&lt;td&gt;ja en ca…&lt;br /&gt;＜jaを先頭に持ってくる＞&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;（※）&lt;/b&gt;&lt;/span&gt;prefork.cの設定になる。&lt;br /&gt;この設定はむしろサーバ側の負荷を抑えるための設定になるので、クライアントマシンとしてのLinuxで行うのは不適切だが、可能な限りサーバ側に合わせられるのもLinuxをクライアントとして使う醍醐味でもあるので、この設定にしてある。&lt;br /&gt;&lt;br /&gt;あと、phpメインの人には余り関係ないが、どの場所でもCGIが使えるようになっており、拡張子も.cgiだけでなく、.plも使用可にしてある。&lt;br /&gt;&lt;br /&gt;そしてファイルの最後の行に、以下のようにバーチャルホストのデフォルト設定を記述すれば完了だ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;&amp;lt;virtualhost *:80&amp;gt;&lt;br /&gt;  ServerAdmin   root@localhost&lt;br /&gt;  ServerName    torhamzedd.com&lt;br /&gt;  DocumentRoot  /var/www/html&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;もしAWStatsを使うのであれば、エラーログファイルのフォーマットを1つ追記しておき、アクセスログはcommonではなくcombinedを指定するようにする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;LogFormat "%h %l %u %t \"%!414r\" %&amp;gt;s %b \"%{Referer}i\" \"%{User-Agent}i\""&lt;br /&gt;&lt;/pre&gt;余談だが、httpsを使う場合、該当するAWStatの設定ファイルに&lt;br /&gt;&lt;pre class="html" name="code"&gt;UseHTTPSLinkForUrl="/"&lt;br /&gt;&lt;/pre&gt;を記述するのを忘れないように。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■PHPの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;phpの設定ファイルも必要に応じてバックアップを取っておこう。&lt;br /&gt;※個人的には/etc直下がバックアップファイルまみれになるのが嫌なので、php.iniやmycnfバックアップは撮ってない。&lt;br /&gt;&lt;br /&gt;早速設定を行う。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/php.ini&lt;br /&gt;&lt;/pre&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;設定項目&lt;/th&gt;&lt;th&gt;変更後&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;post_max_size&lt;/th&gt;&lt;td&gt;1024M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;upload_max_filesize&lt;/th&gt;&lt;td&gt;1024M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※&lt;/span&gt;memory_limit&lt;/th&gt;&lt;td&gt;1024M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mbstring.language&lt;/th&gt;&lt;td&gt;Japanese&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mbstring.internal_encoding&lt;/th&gt;&lt;td&gt;UTF-8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mbstring.http_input&lt;/th&gt;&lt;td&gt;UTF-8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mbstring.http_output&lt;/th&gt;&lt;td&gt;UTF-8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mbstring.detect_order&lt;/th&gt;&lt;td&gt;auto&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;expose_php&lt;/th&gt;&lt;td&gt;Off&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;（※）&lt;/b&gt;&lt;/span&gt;このパラメータは、phpMyAdminなどのWebインタフェース上において、数百メガのSQLファイルをアップロードする場合などのために増やしてあるに過ぎず、これほど大きなサイズを運用で設定しっぱなしというのは結構危険なので、クライアント側だけにとどめておこう。&lt;br /&gt;&lt;br /&gt;その他、mbstring系は最初コメントアウトされているので、上記のすべての「;」は消しておこう。&lt;br /&gt;&lt;br /&gt;expose_phpというのは、phpでメール送信した場合にphpということを隠すかどうかの設定だ。今回はOffにしてある。&lt;br /&gt;&lt;br /&gt;これでPHPの設定は完了だ。&lt;br /&gt;この時点でApacheを起動、もしくは再起動してOK。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service httpd start&lt;br /&gt;&lt;/pre&gt;リブート後に自動起動しておくようにする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# chkconfig httpd on&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;手頃な場所にphpinfo()を記述したphpファイルを設置し、ブラウザで見てみると良い。&lt;br /&gt;&lt;br /&gt;これでApacheとPHPの設定は完了だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■MySQLの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;MySQLは5.1から5.5で、設定ファイルの記述に変化があった。&lt;br /&gt;特に大きいのが、UTF-8などの文字コードを明示的に指定する部分だろう。&lt;br /&gt;&lt;br /&gt;ただ5.5でもちゃんと指定することが出来るので安心だ。&lt;br /&gt;&lt;br /&gt;MySQLの設定ファイルは/etc/my.cnfだ。&lt;br /&gt;不安な人はバックアップしておくとよいが、俺は先程も書いたとおり、/etc直下がバックアップファイルでごちゃごちゃするのが好きではないので、my.cnfのバックアップもしてない。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/my.cnf&lt;br /&gt;&lt;/pre&gt;[mysqld]の下に「symbolic-links=0」という記述があるが、この下に、以下のような設定を貼り付ける。&lt;br /&gt;&lt;pre class="html" name="code"&gt;default-storage-engine=INNODB&lt;br /&gt;skip-character-set-client-handshake&lt;br /&gt;character-set-server=utf8&lt;br /&gt;max_connections=120&lt;br /&gt;innodb_thread_concurrency=8&lt;br /&gt;innodb_buffer_pool_size=1024M&lt;br /&gt;innodb_log_file_size=128M&lt;br /&gt;innodb_file_per_table&lt;br /&gt;read_buffer_size=1M&lt;br /&gt;query_cache_size=12M&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;「max_connections」から「query_cache_size」までは2011.11.14日追記&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;最初の行は、俺は個人的に常にInnoDBを使うので、いちいち設定するのが面倒だからデフォルトでInnoDBになるように設定している。&lt;br /&gt;2行目と3行目では文字コードの設定をしているが、5.1とでは項目名が違うので注意。&lt;br /&gt;&lt;br /&gt;innodb_thread_concurrencyはMySQL5.5だと20がデフォルトだが、この20というのは無制限という意味になってしまうらしく、中規模サイトだとメモリを食いつぶす可能性があるため、明示的に8にしてある（現在調査中）。&lt;br /&gt;&lt;br /&gt;起動時にエラーが出るようであれば、何かが間違っている。俺の設定が間違っている可能性も当然ある。&lt;br /&gt;&lt;br /&gt;その場合、「innodb_file_per_table」だけを設定して、あとは行頭に「;」を入れてコメントアウトしてから起動すると良いかもしれない。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;申し訳ないが、まだMySQL5.5は理解してない部分が多いため、あまり俺の設定を信用しないほうが良いと思う。&lt;br /&gt;後日ちゃんと調べて記事にするのでご期待頂きたく。&lt;/blockquote&gt;これでMySQLの設定は完了。次にデータベースのセットアップを行う。&lt;br /&gt;セットアップに先立って、起動と自動起動の設定を行う。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service mysqld start&lt;br /&gt;# chkconfig mysqld on&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MySQLが無事に起動したら、以下の初期化コマンドを実行する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mysql_secure_installation&lt;br /&gt;&lt;/pre&gt;「Set root password? [Y/n]」と効かれたら、MySQLのrootのパスワードを2回入力する。&lt;br /&gt;それまでは空EnterでOK。&lt;br /&gt;&lt;br /&gt;上記コマンドで初期化が終わったら、今度はMySQLの一般ユーザを作る。&lt;br /&gt;通常、こちらのユーザでMySQLに接続するようにする。&lt;br /&gt;&lt;br /&gt;一旦rootでMySQLにログインし、grantコマンドでユーザを作る。&lt;br /&gt;今回作る一般ユーザは&lt;br /&gt;IDが「dbuser」&lt;br /&gt;PSが「dbpass」&lt;br /&gt;ということにする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mysql -uroot -p&lt;br /&gt;&lt;/pre&gt;初期化時に設定したrootのパスワードを入力してログイン&lt;br /&gt;&lt;pre class="html" name="code"&gt;mysql&amp;gt; grant all privileges on *.* to dbuser@localhost identified by 'dbpass';&lt;br /&gt;mysql&amp;gt; exit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでMySQLのセットアップはOK。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Postfixの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さてPostfixの設定を行おう。基本的にはただ単純に、SendmailからPostfixへ切り替えるだけなので、それほど大した設定をおこおなうわけではないが、念の為、本番サーバでも通用するような設定項目もあえて記述しておくことにする。&lt;br /&gt;&lt;br /&gt;とにかく開発環境と本番サーバが似ていれば似ているほど、定時に帰って立ち飲み屋でいっぱい引っ掛けるプレイが可能となる。&lt;br /&gt;&lt;br /&gt;では早速設定してみよう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/postfix/main.cf&lt;br /&gt;&lt;/pre&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;項目名&lt;/th&gt;&lt;th&gt;設定内容&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;myhostname&lt;/th&gt;&lt;td&gt;mail.torhamzedd.com&lt;/td&gt;&lt;td&gt;ホスト名にmail.をつけておく&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mydomain&lt;/th&gt;&lt;td&gt;torhamzedd.com&lt;/td&gt;&lt;td&gt;ドメイン名。ホスト名と同じで良い&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;myorigin&lt;/th&gt;&lt;td&gt;$mydomain&lt;/td&gt;&lt;td&gt;@mail.torhamzedd.comではなく@torhamzedd.comにするため、mydomainを指定する&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;inet_interfaces&lt;/th&gt;&lt;td&gt;all&lt;/td&gt;&lt;td&gt;待ち受けるネットワークインタフェース全部を指定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mydestination&lt;/th&gt;&lt;td&gt;$myhostname, localhost.$mydomain, localhost, $mydomain&lt;/td&gt;&lt;td&gt;ローカルで受信するドメイン名を指定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mynetworks&lt;/th&gt;&lt;td&gt;192.168.1.0/24, 127.0.0.0/8&lt;/td&gt;&lt;td&gt;許可しているIPアドレス&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;relay_domains&lt;/th&gt;&lt;td&gt;$mydestination&lt;/td&gt;&lt;td&gt;中継を許可するドメイン&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;home_mailbox&lt;/th&gt;&lt;td&gt;Maildir/&lt;/td&gt;&lt;td&gt;メールボックスの種類&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;header_checks&lt;/th&gt;&lt;td&gt;regexp:/etc/postfix/header_checks&lt;/td&gt;&lt;td&gt;Received行を削除&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;※&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_banner&lt;/th&gt;&lt;td&gt;$myhostname ESMTP unknown&lt;/td&gt;&lt;td&gt;MTAの隠蔽&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_client_restrictions&lt;/th&gt;&lt;td&gt;permit_mynetworks, reject_rbl_client relays.ordb.org, permit&lt;/td&gt;&lt;td&gt;SPAM対策（追記する）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_sasl_auth_enable&lt;/th&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;SMTP-AUTH設定（追記する）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_sasl_local_domain&lt;/th&gt;&lt;td&gt;$myhostname&lt;/td&gt;&lt;td&gt;SMTP-AUTH設定（追記する）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_recipient_restrictions&lt;/th&gt;&lt;td&gt;permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination&lt;/td&gt;&lt;td&gt;SMTP-AUTH設定（追記する）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;smtpd_recipient_limit&lt;/th&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;1送信における宛先人数制限（SPAM踏み台対策）この場合10人まで&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;mailbox_size_limit&lt;/th&gt;&lt;td&gt;104857600&lt;/td&gt;&lt;td&gt;メールボックスの容量制限。この場合100MB（1024×1024×&lt;b&gt;100&lt;/b&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;message_size_limit&lt;/th&gt;&lt;td&gt;10485760&lt;/td&gt;&lt;td&gt;メール1通の容量制限。この場合10MB（1024×1024×&lt;b&gt;10&lt;/b&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;（※）&lt;/b&gt;&lt;/span&gt;この部分に関しては別のファイルになるので、そちらで編集する必要がある。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/postfix/header_checks&lt;br /&gt;&lt;/pre&gt;このファイルの最終行に、以下の1行を追記する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;/^Received:/ IGNORE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで基本設定はOKだ。&lt;br /&gt;あとはユーザディレクトリ作成時のテンプレートとなるskel内に、メール用のディレクトリを設置するようにしておく。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mkdir -p /etc/skel/Maildir/{new,cur,tmp}&lt;br /&gt;# chmod -R 700 /etc/skel/Maildir/&lt;br /&gt;&lt;/pre&gt;これで新規ユーザのホームディレクトリには自動的にMaildir以下が作成される。&lt;br /&gt;&lt;br /&gt;設定は以上なので、Postfixを起動する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service sendmail stop&lt;br /&gt;# chkconfig sendmail off&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;しかし現状、Sendmailが優先してしまっていると思うので、専用コマンドで入れ替えることにする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# alternatives --config mta&lt;br /&gt;&lt;/pre&gt;&lt;pre class="html" name="code"&gt;2 プログラムがあり 'mta' を提供します。&lt;br /&gt;&lt;br /&gt;  選択       コマンド&lt;br /&gt;-----------------------------------------------&lt;br /&gt;+ 1           /usr/sbin/sendmail.sendmail&lt;br /&gt;  2           /usr/sbin/sendmail.postfix&lt;br /&gt;&lt;br /&gt;Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:&lt;br /&gt;&lt;/pre&gt;ここでは2をタイプし、Enterしよう。&lt;br /&gt;これでPostfixの設定はOKだ。&lt;br /&gt;&lt;br /&gt;試しに以下のコマンドで受信可能なメールアドレスにメールを送信してみよう。&lt;br /&gt;ここではyou@example.comにメールを送信することとする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# mail you@example.com&lt;br /&gt;Subject: ＜件名を入力する＞&lt;br /&gt;＜本文を入力する＞&lt;br /&gt;＜終了するときは「.」のみの行で改行する＞&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■BINDの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;おまちかねのBINDの設定だ。&lt;br /&gt;&lt;br /&gt;これさえやっておけば、いつでもどこでもノマドなコ・ワーキング且つ、自分がいる場所がデモ会場となる。素晴らしすぎて屁で空が飛べる可能性も高くなるというものだ。&lt;br /&gt;&lt;br /&gt;俺のように全部一人でやらされている人は別として、ちゃんと他者とコラボしている人なら作業効率アップしまくって、そのうちエラ呼吸ができるようになるのかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;閑話休題。&lt;br /&gt;早速設定してみよう。&lt;br /&gt;&lt;br /&gt;まずは事前準備として、chroot対策ファイルコピーシェルを作成し、1度だけ実行しておく。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;# vi bind-chroot-admin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ファイルの中身はこちら。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# bind-chroot install check&lt;br /&gt;rpm -q bind-chroot &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;[ $? -ne 0 ] &amp;amp;&amp;amp; echo bind-chroot not install &amp;amp;&amp;amp; exit 1&lt;br /&gt;&lt;br /&gt;# bind-chroot enabled&lt;br /&gt;sed -i '/^ROOTDIR=/d' /etc/sysconfig/named&lt;br /&gt;echo ROOTDIR=/var/named/chroot &amp;gt;&amp;gt; /etc/sysconfig/named&lt;br /&gt;&lt;br /&gt;# file copy&lt;br /&gt;filelist=`mktemp`&lt;br /&gt;rpm -ql bind|grep ^/etc &amp;gt;&amp;gt; ${filelist}&lt;br /&gt;rpm -ql bind|grep ^/var &amp;gt;&amp;gt; ${filelist}&lt;br /&gt;for file in `cat ${filelist}`&lt;br /&gt;do&lt;br /&gt;  # directory make&lt;br /&gt;  if [ -d ${file} ]; then&lt;br /&gt;      DIRNAME=/var/named/chroot${file}&lt;br /&gt;      [ ! -d ${DIRNAME} ] &amp;amp;&amp;amp; mkdir -p ${DIRNAME}&lt;br /&gt;  fi&lt;br /&gt;  # file copy&lt;br /&gt;  if [ -f ${file} ]; then&lt;br /&gt;      DIRNAME=/var/named/chroot`dirname ${file}`&lt;br /&gt;      [ ! -d ${DIRNAME} ] &amp;amp;&amp;amp; mkdir -p ${DIRNAME}&lt;br /&gt;      /bin/cp -a ${file} ${DIRNAME}&lt;br /&gt;  fi&lt;br /&gt;done&lt;br /&gt;rm -f ${filelist}&lt;br /&gt;&lt;br /&gt;chown named:named /var/named/chroot/var/named/data&lt;br /&gt;chmod 770 /var/named/chroot/var/named/data&lt;br /&gt;chown named:named /var/named/chroot/var/named/dynamic&lt;br /&gt;&lt;br /&gt;exit&lt;br /&gt;&lt;/pre&gt;※【参考】&lt;a href="http://fedorasrv.com/bind.shtml"&gt;http://fedorasrv.com/bind.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;作成したら実行する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# sh bind-chroot-admin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで、chrootが入っているかいないかにかかわらず、適切なファイルコピー処理がされた。&lt;br /&gt;事前準備はこれで終わり。このファイルは消してしまっても構わない。&lt;br /&gt;&lt;br /&gt;次の処理は、BINDの設定ファイルの編集、ゾーンファイルの作成の2個になる。&lt;br /&gt;まずはBINDの設定ファイルの編集だ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /var/named/chroot/etc/named.conf&lt;br /&gt;&lt;/pre&gt;設定ファイルを開くと、最終行に以下のような行があると思う。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;include "/etc/named.rfc1912.zones";&lt;br /&gt;include "/etc/named.root.key";&lt;br /&gt;&lt;/pre&gt;この記述の上に、以下のようにゾーンファイル読み込みの設定を記述する。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;zone "torhamzedd.com" IN {&lt;br /&gt;     type master;&lt;br /&gt;     file "torhamzedd.com.zone";&lt;br /&gt;};&lt;br /&gt;zone "0.0.127.in-addr.arpa" IN {&lt;br /&gt;     type master;&lt;br /&gt;     file "torhamzedd.com.rev";&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;これは何をしているのかというと、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;torhamzedd.comでアクセスされたら「torhamzedd.com.zone」を見ておくれやす&lt;/li&gt;&lt;li&gt;127.0.0.1やlocalhostでアクセスされたら「torhamzedd.com.rev」を見ておくれやす&lt;/li&gt;&lt;/ul&gt;ということだ。&lt;br /&gt;&lt;br /&gt;ちなみに前者を正引き（せいびき）、後者を逆引きと呼ぶ。&lt;br /&gt;これで設定ファイルは完了。&lt;br /&gt;&lt;br /&gt;次に正引き逆引きのゾーンファイルを作成する。&lt;br /&gt;まずは正引きファイルを作成だ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /var/named/chroot/var/named/torhamzedd.com.zone&lt;br /&gt;&lt;/pre&gt;&lt;pre class="ruby" name="code"&gt;$TTL    86400&lt;br /&gt;@       IN      SOA     torhamzedd.com. root.torhamzedd.com. (&lt;br /&gt;        2011062601      ;       serial&lt;br /&gt;        28800           ;       refresh&lt;br /&gt;        14400           ;       retry&lt;br /&gt;        3600000         ;       expire&lt;br /&gt;        86400           ;       minimum&lt;br /&gt;)&lt;br /&gt;                IN      NS              torhamzedd.com.&lt;br /&gt;                IN      MX      10      mail.torhamzedd.com.&lt;br /&gt;@               IN      A               127.0.0.1&lt;br /&gt;*               IN      A               127.0.0.1&lt;br /&gt;&lt;/pre&gt;これは何をしているのかというと、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;DNSはtorhamzedd.comだよ&lt;/li&gt;&lt;li&gt;メールサーバはmail.torhamzedd.comだよ&lt;/li&gt;&lt;li&gt;IPアドレスは127.0.0.1だよ&lt;/li&gt;&lt;/ul&gt;ということを設定している。&lt;br /&gt;&lt;br /&gt;つまり、ブラウザでtorhamzedd.comというドメインにアクセスした場合、必ず127.0.0.1、つまり自分自身にアクセスしてくれるということだ。&lt;br /&gt;更にワイルドカードで「*」をつけたため、例えばaaa.torhamzedd.comでもbbb.torhamzedd.comでもOKというこの素晴らしさ。&lt;br /&gt;&lt;br /&gt;さて次は逆引きのゾーンファイルを作ろう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /var/named/chroot/var/named/torhamzedd.com.rev&lt;br /&gt;&lt;/pre&gt;&lt;pre class="ruby" name="code"&gt;$TTL    86400&lt;br /&gt;@       IN      SOA     torhamzedd.com. root.torhamzedd.com. (&lt;br /&gt;        2011062601      ;       serial&lt;br /&gt;        28800           ;       refresh&lt;br /&gt;        14400           ;       retry&lt;br /&gt;        3600000         ;       expire&lt;br /&gt;        86400           ;       minimum&lt;br /&gt;)&lt;br /&gt;                IN      NS      torhamzedd.com.&lt;br /&gt;                IN      PTR     torhamzedd.com.&lt;br /&gt;&lt;/pre&gt;ここでは何をやっているのかというと、127.0.0.1やlocalhostでアクセスされた場合、それはtorhamzedd.comでおますよ、ということを設定している。ただ、それだけだ。&lt;br /&gt;&lt;br /&gt;通常、自分自身のIPアドレスの4オクテット目をPTRレコードに記述するが、書いてしまうとそのIPアドレスでないと動かなくなるので、ここでは何も指定していない。&lt;br /&gt;&lt;br /&gt;というわけで、これでBINDの準備が揃ったが、そもそも自分自身に対して、自分自身のBINDを優先的に使えという指示を出さないといけない。つまりリゾルバだ。&lt;br /&gt;&lt;br /&gt;リゾルバに自分自身のDNSであるBINDを指定し、その後に外部のDNSなどを指定すれば、torhamzedd.comは必ず自分のマシンを見て、それ以外は外部のDNSを見てくれるようになる。&lt;br /&gt;&lt;br /&gt;というわけでリゾルバの設定は以下のようにする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/resolv.conf&lt;br /&gt;&lt;/pre&gt;&lt;pre class="html" name="code"&gt;search torhamzedd.com&lt;br /&gt;nameserver=127.0.0.1&lt;br /&gt;nameserver=＜プロバイダのDNSなど＞&lt;br /&gt;nameserver=＜プロバイダのDNSなど＞&lt;br /&gt;・・・&lt;br /&gt;&lt;/pre&gt;ついでにネットワークインタフェースの設定ファイルにも書いておく。&lt;br /&gt;使っているマシンのNICが1枚なら、以下の場所に設定ファイルがおいてある。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# vi /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;&lt;/pre&gt;こちらもDNS1を127.0.0.1にして保存すればOKだ。&lt;br /&gt;ネットワークインタフェースの編集をしたら、ネットワークの再起動が必要になるので、以下のコマンドでネットワークを再起動しよう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service network restart&lt;br /&gt;&lt;/pre&gt;これで準備完了。&lt;br /&gt;&lt;br /&gt;ようやくBINDの全設定が終わったので、起動し、自動起動の設定も済ませておく。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service named start&lt;br /&gt;# chkconfig named on&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで今日からあなたのマシンはデモ環境機能を備えた最強マシンとなった。&lt;br /&gt;&lt;br /&gt;Linuxのhostsファイルは、Windowsのように同じIPを複数行に書くことができないので、1行がべらぼうに長くなる。それに同じドメインでサブドメインが複数ある場合なんか、更に面倒くさくなる。&lt;br /&gt;&lt;br /&gt;しかし安心されよ！もうそのアホみたいな作業からは開放されたばい！！&lt;br /&gt;別のドメイン使いたかったら、設定ファイルに追加した内容をドメイン分ふやし、ゾーンファイルもドメイン分増やせば良い！！&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: blue; font-size: large;"&gt;&lt;b&gt;はい今終わった！&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: blue; font-size: large;"&gt;&lt;b&gt;今hostsファイルいじる作業永遠に終わったよ！&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;早速街へ繰り出し、洒落＆乙なカフェバーにでもドヤ顔で入店後、周りの人に見えるようにデモを行うと寝覚め通いと思われる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■次回は？&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次回は、NetBeansやRegexxerなどの、開発時に便利なGUIアプリを紹介する予定だ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-8268836480865987554?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/8268836480865987554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/8268836480865987554'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/08/linuxweb23.html' title='Linuxを使ったWeb開発環境を手早く構築する【2/3】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-4603509152837385351</id><published>2011-08-21T12:18:00.081+09:00</published><updated>2011-08-24T11:45:27.671+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ブリトニー'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTPD'/><category scheme='http://www.blogger.com/atom/ns#' term='epel'/><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='開発環境'/><category scheme='http://www.blogger.com/atom/ns#' term='豚'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='XAMPP'/><category scheme='http://www.blogger.com/atom/ns#' term='MTA'/><category scheme='http://www.blogger.com/atom/ns#' term='RDBMS'/><category scheme='http://www.blogger.com/atom/ns#' term='remi'/><title type='text'>Linuxを使ったWeb開発環境を手早く構築する【1/3】</title><content type='html'>何度も言うけど、あくまで個人的な経験や思想になるが、Linuxで運用しているWebサーバにWebアプリをデプロイするためには、最初からLinuxクライアントで開発するのが手間が省けてよろしい思っている。思っているというか、事実だ。&lt;br /&gt;&lt;br /&gt;現状、Linux（Fedora）で開発し、Linux（CentOS）にデプロイという流れでの作業を定番としているわけなんだけど、Windowsで開発してLinux（CentOS）にデプロイしてた時より遥かに良い。&lt;br /&gt;&lt;br /&gt;なぜなら、コーディング中にデリミタを気にする必要もないしファイルシステム的にパーミッションの設定なども同じわけだから、開発マシンで動けば本番でも動くという可能性が極めて高いからだ。高いというより、普通はそのままで動く。&lt;br /&gt;&lt;br /&gt;WindowsにXAMPPなんていうクソアプリを入れてしまっている人は、本来やらなくて良い作業が山盛りある事を理解したほうが良いと思っている。WindowsとLinuxの違いを意識しながらコーディングするなんて、精神衛生上、良い訳がない。&lt;br /&gt;&lt;br /&gt;これは俺が現状でたどり着いた正解の一つだ。&lt;br /&gt;&lt;blockquote&gt;例えばOSはLinuxサーバで動かすのが明確で且つDBMSはMySQLと決めてしまう場合、デリミタの定数化やORマッパはただのボトルネックでしか無い。処理速度を低下させているだけの無駄なモノ。&lt;br /&gt;ここら辺、フレームワーク側でなんとかならんものか。例えばダウンロードする際に、まるでjQuery-UIの様に、ORマッパのアリ/ナシをチェックボックスで選択できるとか。&lt;br /&gt;そもそも運用中にDBMS変えるなんてことはまずもって、ない。&lt;br /&gt;コーディング中に便利なものが稼働中にも便利とは限らないことをもっとよく意識しておくべき。&lt;/blockquote&gt;しかし当然、正解はひとつだけではない。&lt;br /&gt;&lt;br /&gt;本番サーバ上で開発し、正しく動くのを確認したらそのままリリース、という方法もある。&lt;br /&gt;Gitなどを使って、本番環境そのままで別ブランチで動かすなんて愉快な事も十分可能だ。&lt;br /&gt;&lt;br /&gt;個人的には徐々にこのステップに移行していこうと思っている。とにかく無駄をなくすんだ。なくせばなくすだけ精神的にも肉体的にも負担が減り、その分家族サービスや他の勉強なんかも充実してくるってわけだ。&lt;br /&gt;&lt;br /&gt;しかし今回はあくまで、手元の開発環境の構築という話をするので、この件はまた別途。&lt;br /&gt;&lt;br /&gt;前置きは終わり。本題に入る。&lt;br /&gt;&lt;br /&gt;前回のシリーズ「&lt;a href="http://torhamzedd.blogspot.com/2011/04/windows16.html"&gt;Windowsにサヨナラだ！&lt;/a&gt;」ではひと通りLinuxクライアントの設定をざっくり説明したが、これからLinuxを使って開発したいと思う人は読んでおいてほしい。&lt;br /&gt;&lt;br /&gt;別にOSをまるごとLinuxに入れ替えなくても、VMware Playerなどを使って、Windows上でLinuxを構築してもOKだと思う。ただし！間違ってもXAMPPなんか使うんじゃない（ブスでデブで頭の悪い女がブリトニーと同じ格好をしても、それはブリトニーではなく、ただの愚かなブタだということを知る必要がある）。&lt;br /&gt;&lt;br /&gt;全体の流れは以下のように進めていく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;必要なパッケージの準備&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 便利なアプリ、使うかもしれないアプリなどをひと通り揃える&lt;br /&gt;&lt;br /&gt;&lt;b&gt;バックエンド構築&lt;/b&gt;&lt;br /&gt;&amp;nbsp; HTTPd、RDBMS、MTA、DNSなどをひと通りセットアップする&lt;br /&gt;&lt;br /&gt;&lt;b&gt;開発環境の構築&lt;/b&gt;&lt;br /&gt;&amp;nbsp; eclipseやNetBeans、vim-X11、gEditや、&lt;br /&gt;&amp;nbsp; gFTP、Filezillaなどのセットアップなど&lt;br /&gt;&lt;br /&gt;というわけで、早速行ってみよう。&lt;br /&gt;&lt;br /&gt;まずはパッケージの準備をしよう。&lt;br /&gt;インストールするパッケージは以下になる。&lt;br /&gt;すでに入れてしまっている場合は無視して次に進もう。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apache 2.2&lt;/li&gt;&lt;li&gt;MySQL 5.5&lt;/li&gt;&lt;li&gt;PHP 5.3.8&lt;/li&gt;&lt;li&gt;Postfix&lt;/li&gt;&lt;li&gt;BIND&lt;/li&gt;&lt;/ul&gt;可能な限り新しいバージョンを入れるため、予めyumのリポジトリを設定しておくこととする。&lt;br /&gt;追加するリポジトリは、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;epel&lt;/li&gt;&lt;li&gt;remi&lt;/li&gt;&lt;/ul&gt;の2つだ。&lt;br /&gt;※今回、あくまで俺のやり方なので、もっと良い方法があるかもしれないのを断っておく&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;■epelリポジトリの追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;まずepelリポジトリを入れる。&lt;br /&gt;手順としては、&lt;br /&gt;&lt;ol&gt;&lt;li&gt;epel-releaseダウンロード&lt;/li&gt;&lt;li&gt;epel-release解凍&lt;/li&gt;&lt;li&gt;RPM-GPG-KEY-EPEL、elep.repoをコピー&lt;/li&gt;&lt;/ol&gt;の3工程だ。&lt;br /&gt;&lt;br /&gt;なんで解凍してから手動で設置するかというと、他の方法ではエラーが出ることがあったが、この方法では一度もエラーが出ないからだ。&lt;br /&gt;&lt;br /&gt;少々面倒臭いが、この方法でいこうじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.fedora.redhat.com/pub/epel/5/i386/"&gt;http://download.fedora.redhat.com/pub/epel/5/i386/&lt;/a&gt;&lt;br /&gt;このサイトから、「&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;a href="http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm"&gt;epel-release-5-4.noarch.rpm&lt;/a&gt;&lt;/span&gt;」をダウンロードする。&lt;br /&gt;※バージョンは後日変わる可能性があるので注意&lt;br /&gt;&lt;br /&gt;ダウンロードしたrpmは&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;ダブルクリックしない&lt;/b&gt;&lt;/span&gt;で、&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;右クリックしてから書庫マネージャ&lt;/span&gt;&lt;/b&gt;で開く。&lt;br /&gt;&lt;br /&gt;書庫マネージャで開いたepel-release内の、&lt;br /&gt;/etc/pki/rpm-gpg/RPM-GPG-KEY-EPELを選択して「展開」。&lt;br /&gt;同じように&lt;br /&gt;/etc/yum.repos.d/epel.repoを選択して「展開」する。&lt;br /&gt;&lt;br /&gt;端末を開いてrootになり、&lt;br /&gt;RPM-GPG-KEY-EPELは/etc/pki/rpm-gpg/内へ、&lt;br /&gt;epel.repoは/etc/yum.repos/d/へ、&lt;br /&gt;それぞれファイルを移動する。&lt;br /&gt;&lt;br /&gt;※epel.repo内のenabledは1になっているが、0にしておくことを強く勧める。&lt;br /&gt;&lt;br /&gt;これでelepは完了だ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■remiリポジトリの追加&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次にremiリポジトリを入れる。&lt;br /&gt;手順としては、&lt;br /&gt;&lt;ol&gt;&lt;li&gt;remi-releaseダウンロード&lt;/li&gt;&lt;li&gt;remi-release解凍&lt;/li&gt;&lt;li&gt;RPM-GPG-KEY-EPELをコピー&lt;/li&gt;&lt;li&gt;remi-enterprise.repoを作成&lt;/li&gt;&lt;/ol&gt;の4工程だ。&lt;br /&gt;&lt;br /&gt;epelと同じく、なんで解凍してから手動で設置するかというと、他の方法ではエラーが出ることがあったが、この方法では一度もエラーが出ないからだ。&lt;br /&gt;&lt;br /&gt;くどいようだが、少々面倒臭いが、この方法でいこうじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rpms.famillecollet.com/el5.i386/"&gt;http://rpms.famillecollet.com/el5.i386/&lt;/a&gt;&lt;br /&gt;このサイトから、「&lt;a href="http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm"&gt;remi-release-5-8.el5.remi.noarch.rpm&lt;/a&gt;」をダウンロードする。&lt;br /&gt;※バージョンは後日変わる可能性があるので注意&lt;br /&gt;&lt;br /&gt;ダウンロードしたrpmは&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;ダブルクリックしない&lt;/b&gt;&lt;/span&gt;で、&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;右クリックしてから書庫マネージャ&lt;/b&gt;&lt;/span&gt;で開く。&lt;br /&gt;&lt;br /&gt;書庫マネージャで開いたremi-release内の、&lt;br /&gt;/etc/pki/rpm-gpg/RPM-GPG-KEY-remiを選択して「展開」。&lt;br /&gt;&lt;br /&gt;RPM-GPG-KEY-remiは/etc/pki/rpm-gpg/内へ、ファイルを移動する。&lt;br /&gt;&lt;br /&gt;つぎに端末でrootになって、/etc.yum.repos.d/へ移動し、&lt;br /&gt;remi-enterprise.repoを作成する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# cd /etc/yum.repos.d&lt;br /&gt;# vi&amp;nbsp;remi-enterprise.repo&lt;br /&gt;&lt;/pre&gt;以下をそのまま貼りつければOK。&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;[remi]&lt;br /&gt;name=Les RPM de remi pour Enterprise Linux $releasever - $basearch&lt;br /&gt;#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/&lt;br /&gt;mirrorlist=http://rpms.famillecollet.com/fedora/$releasever/remi/mirror&lt;br /&gt;enabled=0&lt;br /&gt;gpgcheck=1&lt;br /&gt;gpgkey=http://rpms.famillecollet.com/RPM-GPG-KEY-remi&lt;br /&gt;failovermethod=priority&lt;br /&gt;&lt;br /&gt;[remi-test]&lt;br /&gt;name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch&lt;br /&gt;#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/&lt;br /&gt;mirrorlist=http://rpms.famillecollet.com/fedora/$releasever/test/mirror&lt;br /&gt;enabled=0&lt;br /&gt;gpgcheck=1&lt;br /&gt;gpgkey=http://rpms.famillecollet.com/RPM-GPG-KEY-remi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでremiはOKだ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Apache、PHP、MySQLのインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;もしかしたらApacheは最初からインストールされているかもしれない。&lt;br /&gt;以下のコマンドで調べてみよう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# rpm -qa httpd&lt;br /&gt;&lt;/pre&gt;もし画面に&lt;br /&gt;&lt;pre class="html" name="code"&gt;httpd-2.0.16-1.fc14.i686&lt;br /&gt;&lt;/pre&gt;などと表示されたら、最初からインストールされているということになる。&lt;br /&gt;&lt;br /&gt;その場合は&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum remove httpd&lt;br /&gt;&lt;/pre&gt;で消してしまおう。&lt;br /&gt;&lt;br /&gt;Apacheもphpもmysqlも、remiリポジトリにあるものを入れるからだ。&lt;br /&gt;これで何もない状態からApacheをインストールすることができる。&lt;br /&gt;&lt;br /&gt;remiにあるApacheやPHPのバージョンを確認してみよう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum --enalberepo=remi info httpd&lt;br /&gt;&lt;br /&gt;Name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: httpd&lt;br /&gt;Arch &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: i686&lt;br /&gt;Version &amp;nbsp; &amp;nbsp; : 2.2.17&lt;br /&gt;・・・&lt;br /&gt;&lt;/pre&gt;こんな文字が出力される。バージョンは2.2.17だそうだ。&lt;br /&gt;&lt;br /&gt;同じ様に、phpも調べておく。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum --enablerepo=remi info php&lt;br /&gt;&lt;br /&gt;Name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: php&lt;br /&gt;Arch &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: i686&lt;br /&gt;Version &amp;nbsp; &amp;nbsp; : 5.3.8&lt;br /&gt;Release &amp;nbsp; &amp;nbsp; : 2.fc14.remi&lt;br /&gt;&lt;/pre&gt;phpは5.3.7だ。&lt;br /&gt;&lt;br /&gt;というわけで、Apacheとphp周りを早速インストールする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum --enablerepo=remi install httpd php php-devel php-bcmath php-gd php-imap php-ldap \&lt;br /&gt;    php-mbstring php-mcrypt php-mysql php-pdo php-pear\&lt;br /&gt;    php-pspell php-snmp php-soap php-tidy php-xml php-xmlrpc&lt;br /&gt;&lt;/pre&gt;SVNを使ったり、SSL対応のサイトを開発するのが前提であれば、以下も入れておくことをオススメする。&lt;br /&gt;当然、入れておいて使わないのも全然アリだ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum --enablerepo=remi install mod_ssl mod_perl mod_dav_svn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次にMySQLをインストールする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;yum --enablerepo=remi install mysql-server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでApache、PHP、MySQLが完了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Postfix、BINDのインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;メールサーバにSendmailやqmailを使う人はこのまま詠み飛ばしても構わないが、Sendmailは歴史的経緯から、qmailは（確かにバグは発見されてはいないが）汎用性を考慮して使わないというのが俺のポリシーだ。&lt;br /&gt;当然両方とも使ったことがある。その上で、Postfixを使うことを選んでいる。&lt;br /&gt;&lt;br /&gt;というわけでPostfixをインストールする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum install postfix&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;インストールはこれで終わり。&lt;br /&gt;次にDNSであるBINDをインストールする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum -y install bind bind-chroot caching-nameserver&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでBINDのインストールは終わりだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■次回は？&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次回から、今インストールした必須パッケージの設定を行う予定。&lt;br /&gt;特にBINDの設定は必読だと思う。&lt;br /&gt;&lt;br /&gt;というのも、例えばあなたがノートPCにFedoraやUbuntuを入れて、その場で動くサイトのデモを行う場合、会場が無線LANのセミナールームだったり、職場の固定ローカルIPの場であったり、いろいろなケースがあるとおもうが、それらにも対応できる&lt;b&gt;ローカルDNSサーバ&lt;/b&gt;を作るからだ。&lt;br /&gt;&lt;br /&gt;このDNSが動いていれば、いちいちサブドメインを切ってバーチャルホスト対応しているドメインを&lt;b&gt;hostsファイルにずらずらみっとも無く記述する必要が無くなる&lt;/b&gt;し、そもそもサブドメインをどこかで管理するという必要が全くなくなるわけだ。&lt;br /&gt;&lt;br /&gt;というわけで、Apache、php、MySQL、Postfixなどの設定は軽く終わらせ、BINDのローカルDNSをメインに説明する予定。&lt;br /&gt;&lt;br /&gt;乞うご期待。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-4603509152837385351?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4603509152837385351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/4603509152837385351'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/08/linuxweb13.html' title='Linuxを使ったWeb開発環境を手早く構築する【1/3】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-6800332277735016607</id><published>2011-07-31T12:00:00.004+09:00</published><updated>2011-08-10T22:44:57.383+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP'/><category scheme='http://www.blogger.com/atom/ns#' term='勉強会'/><category scheme='http://www.blogger.com/atom/ns#' term='LT'/><title type='text'>CakePHP for Designers 勉強会でLTしました</title><content type='html'>今まで勉強会というのは何度か参加したことはあるけど、LT（LightningTalk）は経験したことがなかった。&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 15px; line-height: 22px;"&gt;&lt;b&gt;ライトニングトーク&lt;/b&gt;（Lightning Talk）とは&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%B3%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="カンファレンス"&gt;カンファレンス&lt;/a&gt;や&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A9%E3%83%A0" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="フォーラム"&gt;フォーラム&lt;/a&gt;などで行われる短い&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="プレゼンテーション"&gt;プレゼンテーション&lt;/a&gt;のこと。様々な形式があるが、持ち時間が5分という制約が広く共有されている。&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;wikipediaより&lt;/div&gt;&lt;/blockquote&gt;いつか、近いうちにLTを経験しておくべきかな、と思い、Twitter上でつぶやいたところ、なんとLTやってみないかとお誘いがあった（@konsan あざっす！！）。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;そのカンファレンスは「デザイナー向けCakePHP勉強会」。つまりロゴ的には「CakePHP for Designer」だ（Twitterでのハッシュは#cakephp4d）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;具体的な内容はATNDの方を見ていただければ良いかと。&lt;/div&gt;&lt;div&gt;&lt;a href="http://atnd.org/events/17625"&gt;http://atnd.org/events/17625&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;こちら会場がなんと、さくらインターネットのセミナールームで、しかも無料でお貸しいただけたとのことで、この場をお借りして御礼申し上げたい。ありがとうございました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ちなみにさくらインターネットの場所はこちら。&lt;/div&gt;&lt;br /&gt;&lt;div style="margin: 0 auto; text-align: center;"&gt;&lt;iframe frameborder="0" height="300" marginheight="0" marginwidth="0" scrolling="no" src="http://www.google.co.jp/maps?q=35.6866072,139.6889762(%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%96%B0%E5%AE%BF%E5%8C%BA%E8%A5%BF%E6%96%B0%E5%AE%BF4-33-4+%E4%BD%8F%E5%8F%8B%E4%B8%8D%E5%8B%95%E7%94%A3%E8%A5%BF%E6%96%B0%E5%AE%BF%E3%83%93%E3%83%AB4%E5%8F%B7%E9%A4%A8+6F)&amp;amp;ie=UTF8&amp;amp;z=14&amp;amp;brcurrent=3,0x60188cd4cfbaff57:0x12385d2a418fd33d,0&amp;amp;ll=35.686607,139.688976&amp;amp;output=embed" width="525"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://www.google.co.jp/maps?q=35.6866072,139.6889762(%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%96%B0%E5%AE%BF%E5%8C%BA%E8%A5%BF%E6%96%B0%E5%AE%BF4-33-4+%E4%BD%8F%E5%8F%8B%E4%B8%8D%E5%8B%95%E7%94%A3%E8%A5%BF%E6%96%B0%E5%AE%BF%E3%83%93%E3%83%AB4%E5%8F%B7%E9%A4%A8+6F)&amp;amp;ie=UTF8&amp;amp;z=14&amp;amp;brcurrent=3,0x60188cd4cfbaff57:0x12385d2a418fd33d,0&amp;amp;ll=35.686607,139.688976&amp;amp;source=embed" style="color: blue; text-align: left;"&gt;大きな地図で見る&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;&lt;br /&gt;さくらインターネットは俺も最近個人で契約を始めたレンタルサーバ屋で、VPSであれば月額980円でサーバをレンタルすることができる。非常に便利だ。&lt;br /&gt;&lt;br /&gt;自宅サーバをすべてさくらインターネットのVPSに移動し、自宅ではサーバダウンなどに神経質にならずに済んでいる。&lt;br /&gt;&lt;br /&gt;というわけで、2011年7月21日、勉強会の開始が職場の勤務時間終了より前だったため、職場を抜けだして参加と相成った（ちゃんと事前に予定には入れておいたので大丈夫なはず）。&lt;br /&gt;&lt;br /&gt;当日、大きなトラブルもなく、わきあいあいと勉強会は進んでいった。&lt;br /&gt;※小さなトラブルはあった&lt;br /&gt;&lt;br /&gt;全体の流れ的にはこんな感じ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ごあいさつ&lt;/b&gt;&lt;br /&gt;田中さん @mon_sat&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CakePHPについての基礎知識&lt;/b&gt;&lt;br /&gt;市川さん @cakephper&lt;br /&gt;資料：URLがわからんす！&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CakePHPのデザイン周りについて（初級）&lt;/b&gt;&lt;br /&gt;滝下さん @ecworks_masap&lt;br /&gt;資料：&lt;a href="http://labs.ecworks.jp/download/CakePHPforDesign.pdf"&gt;http://labs.ecworks.jp/download/CakePHPforDesign.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MVCを極めしWebデザイナーになる&lt;/b&gt;&lt;br /&gt;原さん @kara_d&lt;br /&gt;資料：&lt;a href="http://www.slideshare.net/karadweb/mvcvweb-cakephp"&gt;http://www.slideshare.net/karadweb/mvcvweb-cakephp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PHPTAL/CakePHP-TALTAL&lt;/b&gt;&lt;br /&gt;野島さん @nojimage&lt;br /&gt;資料：&lt;a href="http://www.slideshare.net/nojimage/phptal-with-cakephp"&gt;http://www.slideshare.net/nojimage/phptal-with-cakephp&lt;/a&gt;&lt;br /&gt;※九州からサテライトで参加&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CakePHPのpaginatorのデザイン周り&lt;/b&gt;&lt;br /&gt;小川 @ogaaaan&lt;br /&gt;資料：&lt;a href="http://www.slideshare.net/ogaaaan/cake-php4designers"&gt;http://www.slideshare.net/ogaaaan/cake-php4designers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LTの最後を努めさせていただいたのだが、実はちょっとしたトラブルがあり、スライドをお見せすることが出来なかった。&lt;br /&gt;&lt;br /&gt;なんでかというと、最近は開発環境をWindowsからLinuxへ移行しているのもあり、正直WindowsよりLinuxの方が操作に慣れてきているので、勉強会に持っていくノートPCにもFedora15（Linux）をインストールしておいたわけだ。&lt;br /&gt;&lt;br /&gt;それにたぶんだけど会場のみんなはWindowsよりマックの方が多いと思うから、Fedora15の新しいGUIであるGNOME3なんかをネタにして、おもろい話ができたらこれまた幸いかと。&lt;br /&gt;&lt;br /&gt;しかしこれが暴挙だった。&lt;br /&gt;&lt;br /&gt;なんとFedora15に搭載されているこのGNOME3が、外部出力が正しく行われないというトラブルを起こしてしまった。&lt;br /&gt;&lt;br /&gt;Fedora14では問題なくプロジェクタに出力できていたので、アッパーコンパチブル的に大丈夫とたかを括っていたのが悪かった。出力テストすらしていなかった。&lt;br /&gt;&lt;br /&gt;結局、せっかくつくったスライドはお見せすることままならず、ひとりで身振り手振りで説明するという、なんともスピリチュアルかつエスポワールな展開となり、まぁ別の意味で印象深い勉強会にしてしまった感があったりする。&lt;br /&gt;&lt;br /&gt;自分では、南斗水鳥拳のレイのような華麗な動きをしていたつもりだが、もしかしたら山のフドウの様に、力任せのDQNに見えてしまっていたのかもしれない。&lt;br /&gt;&lt;br /&gt;LTの最中、後ろで田中さん@mon_satと市川さん@cakephperが、俺のイカれたノートPCとプロジェクタの調整をしていただいてくれていた。あざっす！&lt;br /&gt;&lt;br /&gt;結局スライドは断念となったが、こういうお心遣いがCakePHPコミュニティの良いところだなぁ、と思った。CakePHPのコミュニティに参加する様になってから、親切な人と出会う機会が増えた。&lt;br /&gt;&lt;br /&gt;その時のスライドは、上にもURLを貼ったが、ここに埋め込んでみる。&lt;br /&gt;&lt;div id="__ss_8658608" style="margin: 0 auto; text-align: center; width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ogaaaan/cake-php4designers" target="_blank" title="Cake php4designers"&gt;Cake php4designers&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/8658608" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ogaaaan" target="_blank"&gt;Seiji Ogawa&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;まず、最近の俺が資料を作るときに気をつけていることがあって、それを先に説明したい。&lt;br /&gt;少々長ったらしいが、大体こんな感じ。&lt;br /&gt;&lt;br /&gt;できる限りわかりやすく、印象深く、楽しいプレゼンをしたいと思っているが、LTなので5分で済む内容を作る。&lt;br /&gt;&lt;br /&gt;その時に前提となる懸念点が&lt;br /&gt;&lt;ul&gt;&lt;li&gt;思ったことをそのまま書いて作るとページ数がべらぼうに増えてしまう&lt;/li&gt;&lt;li&gt;ソースコードをバシバシ貼りつけていくと文字が小さくなって見えにくくなる&lt;/li&gt;&lt;li&gt;専門的な話になればなるほど会場のみんなの睡魔を呼び起こしてしまう&lt;/li&gt;&lt;/ul&gt;が挙げられる。&lt;br /&gt;&lt;br /&gt;というわけで、まずはLibreOfficeのImpressで軽く思ったとおりに作り、ひと通り満足行ったら次にページを減らす作業にとりかかる。&lt;br /&gt;&lt;br /&gt;だいたい1項目は2ページ以上にならないように心がける。&lt;br /&gt;&lt;br /&gt;ページを減らす際には「そもそも何を伝えたいのか」を重視し、それ以外の余計な文章、図は思い切って削除。&lt;br /&gt;&lt;br /&gt;特に矢印シェイプには気をつけた。たいていが矢印の元と先は図上でずれていることが多く、それが余計な混乱を呼ぶ可能性があるので、矢印シェイプだけではなくコネクタシェイプもよく使うようにしている。&lt;br /&gt;&lt;br /&gt;それぞれのシェイプのデザインにも気をつけた。&lt;br /&gt;&lt;br /&gt;アウトラインと背景色とテキスト色にも視覚的に配慮した。スライドはたいてい薄暗いところでみるので、白い背景に赤や緑などの周波数を発する色使いをすると、眠気は収まるが、刺激が強いかなと思い、青と緑の中間を使用し、基本的に寒色をメインにすることにした。&lt;br /&gt;&lt;br /&gt;それとは別に、このパターンはこういう時に使う、というシェイプを3つ4つ脳内定義し、形状パターンの意味にズレがないようにシェイプをデザインしている。&lt;br /&gt;&lt;br /&gt;これにより少ない情報量でページに大きな余白ができ、伝えたいこと（そのページ内でのコンセプト）をうまく伝えることができる。&lt;br /&gt;&lt;br /&gt;そしてIT系勉強会ではソースコードを見せることが多いので、まずソースコードのフォントをタイプライター的なフォントに固定し、サイズも見やすい様に調整し、必要最低限のソースのみ記載することとしてみた。&lt;br /&gt;&lt;br /&gt;やむなく改行する時も、見れば理解していただける位置で改行させる。あとは口頭で補足を入れるだけで良い。&lt;br /&gt;&lt;br /&gt;ソースコードの比較などをする場合は、比較対象を目立たせるだけではなく、関係ない部分はグレーアウトさせるなど、少ない文字数に対して色やサイズなどで情報量を増やす。これなら感覚的に理解していただけるかと。&lt;br /&gt;&lt;br /&gt;そして専門的な話をなるべくしないのも大事だ。&lt;br /&gt;&lt;br /&gt;専門的な単語を発言した瞬間、それを説明しようとして更に専門的な話をしてしまい、結局時間オーバーしてしまうのを避けるためだ。&lt;br /&gt;&lt;br /&gt;俺の中ではLTは5分で終わらせるからLTなんだ、という概念がある。&lt;br /&gt;&lt;br /&gt;個人的には、専門的な話が出てきてしまいそうなときは、「〜というのがあるのですが、これはこのまま覚えてください」とか「〜というのは、とりあえずいまは忘れてください」的な表現で避けることにしている。それをどう捉えようが、聞いてる側の自由だ。&lt;br /&gt;&lt;br /&gt;さらに大事なのが、お客さんんが寝る第一位の理由だとおもっているんだが、これをやってはいけないというのが自分の中にはある。&lt;br /&gt;&lt;br /&gt;別に何かの本に書いてあったわけでもなく、ただ自分が仕事していて、会議中よく寝むくなるので、その理由を探っていたら気がついたことだ。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: red; font-size: large;"&gt;&lt;b&gt;「書いてある文字をただ&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red; font-size: large;"&gt;&lt;b&gt;読むだけ」&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red; font-size: large;"&gt;&lt;b&gt;は&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;基本NG&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;！&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;だ。これはマジで聞いてて眠くなる。&lt;br /&gt;&lt;br /&gt;だから俺の資料には、自分でしゃべる部分は文字としてほとんど記載していない。&lt;br /&gt;記載してあったとしても、そのとおり読んだりはしない。必ず別の言い方をするように心がけている。&lt;br /&gt;&lt;br /&gt;例えば「この機能はAuthコンポーネントを必須とする」と書いてあったら「認証用の機能を予め設定しておくのがポイントですね」的な言い方をするように心がけてはいる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;というわけで、何が言いたいのかというと、上に埋め込んだ資料は、俺が説明したい文章、つまり伝えたい内容は文章では特に記載していないので、もしかしたらニュアンスがつかめないかな、と思っていた。&lt;br /&gt;&lt;br /&gt;それを懸念して、新たに一人でプレゼンを行い、その様子を動画にとってYouTubeに載せようと思ったが、正直面倒くさいので勘弁してもらうことにした。&lt;br /&gt;&lt;br /&gt;ただ、資料を公開したら意外にわかりやすいとの意見も結構あったので、特に資料の補足はしないでこのまま終わらせることにするよ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最後に、会場に来てくれたみなさん、そして暖かく迎えてくれたCakePHPのゆかいな仲間たち、会場を貸してくれたさくらインターネット、並びに懇親会会場で素敵な衣装で俺の煩悩を刺激してくれた店員のおネーさん、本当にありがとうございました。&lt;br /&gt;&lt;br /&gt;※緊張するとマシンガントークになるので、LTより懇親会の方がぜんぜん緊張してた&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;おまけ&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;2011.08.08追記&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="margin: 0 auto; text-align: center; width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ogaaaan/cake-php-8785215" target="_blank" title="Cake phpアセット管理"&gt;Cake phpアセット管理&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/8785215" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ogaaaan" target="_blank"&gt;Seiji Ogawa&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;スタッフに「オガーンはLTでPaginatorやってくれ」と言われる前、これをやろうと思って速攻で作ったアセット管理のスライド。&lt;br /&gt;&lt;br /&gt;陽の目を浴びないとかわいそうなのでここに晒しておくよ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;2011.08.10追記&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;市川さん＠Cakephperがなんと、失われた動画の発掘に成功したため、以下に前半＋後半のリンクを貼っておくんでぜひ、ご覧あれ！&lt;br /&gt;&lt;br /&gt;前半：&lt;a href="http://www.ustream.tv/recorded/16144624"&gt;http://www.ustream.tv/recorded/16144624&lt;/a&gt;&lt;br /&gt;後半：&lt;a href="http://www.ustream.tv/recorded/16145670"&gt;http://www.ustream.tv/recorded/16145670&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;市川さんあざっす！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-6800332277735016607?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6800332277735016607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/6800332277735016607'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/07/cakephp-for-designers-lt.html' title='CakePHP for Designers 勉強会でLTしました'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-1763822106569358669</id><published>2011-07-30T19:53:00.003+09:00</published><updated>2011-07-30T21:55:56.345+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='Sylpheed'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora15'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><title type='text'>Windowsにサヨナラだ！！〜 Fedora15 〜【6/6】</title><content type='html'>さて今回で最終回の予定。&lt;br /&gt;&lt;br /&gt;早速行ってみよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■フォント&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Migu&lt;/th&gt;&lt;td&gt;Windowsで言う所のメイリオ的存在。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;みかちゃんフォント&lt;/th&gt;&lt;td&gt;商用可能な無償フォント。可愛いフォントの決定版。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Migu】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Fedoraに入っているVL ゴシックなどにそれほど文句があるわけではないが、良い素敵なフォントがあればそっちを使おうじゃないか。&lt;br /&gt;&lt;br /&gt;Migu（ミグ）フォントのサイトはこちら。&lt;br /&gt;&lt;a href="http://mix-mplus-ipa.sourceforge.jp/migu/"&gt;http://mix-mplus-ipa.sourceforge.jp/migu/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DOWNLOADのページから好きなフォントをダウンロードしよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-f0H02GtG2PE/TjLR1dppU3I/AAAAAAAADCo/K6Sf1u5FsSo/s1600/font_migu01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://3.bp.blogspot.com/-f0H02GtG2PE/TjLR1dppU3I/AAAAAAAADCo/K6Sf1u5FsSo/s320/font_migu01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ここでは「Migu 1M」と「Migu 2M」をインストールすることとする。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Migu-2M-20110610.zip&lt;/li&gt;&lt;li&gt;Migu-1M-20110610.zip&lt;/li&gt;&lt;/ul&gt;zipファイルを解凍するとttfファイルが２つ出てくる。&lt;br /&gt;それぞれボールド体とレギュラー体だ。&lt;br /&gt;この２つを以下のパスへ移動する。&lt;br /&gt;&lt;br /&gt;移動先は一般ユーザではアクセスできないので、suコマンドでrootになろう。&lt;br /&gt;その前に、もしフォントのインストールが初めてならば、ディレクトリを作っておかないといけない。&lt;br /&gt;&lt;br /&gt;/usr/share/fonts/の中に&lt;br /&gt;japanese/TrueType&lt;br /&gt;が作られている必要がある。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ su -&lt;br /&gt;パスワード：&lt;br /&gt;# mkdir -p /usr/share/fonts/japanese/TrueType&lt;br /&gt;&lt;/pre&gt;その後ダウンロードして解凍したフォントディレクトリに移動し、フォントをコピーする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# cd /home/ogaaaan/Download/Migu-2M-20110610/&lt;br /&gt;# cp Migu-2M-bold.ttf &amp;nbsp; &amp;nbsp;/usr/share/fonts/japanese/TrueType/&lt;br /&gt;# cp Migu-2M-regular.ttf /usr/share/fonts/japanese/TrueType/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでOKだ。&lt;br /&gt;&lt;br /&gt;gedit、コマンドラインの端末など、このMigu 2Mで表示させると非常に綺麗だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HynzB_1JM1Y/TjLR3VhReNI/AAAAAAAADCs/AmTasMyz54U/s1600/font_migu02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://2.bp.blogspot.com/-HynzB_1JM1Y/TjLR3VhReNI/AAAAAAAADCs/AmTasMyz54U/s320/font_migu02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【みかちゃんフォント】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;みかちゃんフォントというのは非常に歴史のある有名なフォントなんだが知っているだろうか。公式サイトはこちら。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www001.upp.so-net.ne.jp/mikachan/"&gt;http://www001.upp.so-net.ne.jp/mikachan/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;雑誌やお菓子のパッケージにまで使われている、非常に有名な存在である。&lt;br /&gt;しかも商用可能という、なんとも太っ腹で嬉しい配布をしていただいているので、ありがたく使わせてもらうことにしようじゃないか。&lt;br /&gt;&lt;br /&gt;「だうんろーど」から「Linux用」ボタンで次のページへ進む。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;みかちゃんフォント&lt;/li&gt;&lt;li&gt;みかちゃんフォント-P&lt;/li&gt;&lt;li&gt;みかちゃんフォント-PB&lt;/li&gt;&lt;li&gt;みかちゃんフォント-PS&lt;/li&gt;&lt;/ul&gt;の４つのボタンがあるが、すべてダウンロードする。ダウンロードする際には「ソースアーカイブ」を選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XdulqQtBvRs/TjLUPfS4-uI/AAAAAAAADC0/3lqdb5y_ZPk/s1600/font_ika01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://2.bp.blogspot.com/-XdulqQtBvRs/TjLUPfS4-uI/AAAAAAAADC0/3lqdb5y_ZPk/s320/font_ika01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;他の２つのRPM版は少々インストールが面倒なので、今回は割愛する。&lt;br /&gt;※インストールに別のライブラリ必要なのだがそれが面倒臭い&lt;br /&gt;&lt;br /&gt;というわけで、ダウンロードしてきたtar.bz2をダブルクリックして解凍し、fontsフォルダにあるttfファイルを、Miguと同じようにコピーする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# cd /home/ogaaaan/Download/mikachanfont-8.9/fonts&lt;br /&gt;# cp mikachan.ttf &amp;nbsp; &amp;nbsp;/usr/share/fonts/japanese/TrueType/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;P、PB、PSも全てコピーしよう。&lt;br /&gt;&lt;br /&gt;これでGIMPなどのグラフィックソフトで使うことができるようになる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qs_CmMIqGpo/TjLUTfPbUmI/AAAAAAAADC4/IqWKJCamk-4/s1600/font_ika02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://4.bp.blogspot.com/-qs_CmMIqGpo/TjLUTfPbUmI/AAAAAAAADC4/IqWKJCamk-4/s320/font_ika02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■メッセンジャー系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Empathy&lt;/th&gt;&lt;td&gt;GNOMEデフォのマルチアカウントメッセンジャー。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Skype&lt;/th&gt;&lt;td&gt;SkypeのLinux版。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Empathy】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Empathyは最初からインストールされている。&lt;br /&gt;「アプリケーション」＞「インターネット」＞「Empathy インスタント・メッセンジャー」で起動できる。&lt;br /&gt;&lt;br /&gt;起動するとアカウント設定のダイアログが開く。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-njDjj7NJ7H4/TiRSc6EaoyI/AAAAAAAAC3s/xJ4InzaRgbU/s1600/empathy01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-njDjj7NJ7H4/TiRSc6EaoyI/AAAAAAAAC3s/xJ4InzaRgbU/s320/empathy01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;もし以下のアカウントを持っているのであれば、それらのインスタントメッセンジャーのアカウントを入力する。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jabber&lt;/li&gt;&lt;li&gt;Facebook（チャット）&lt;/li&gt;&lt;li&gt;Google Talk&lt;/li&gt;&lt;li&gt;AIM&lt;/li&gt;&lt;li&gt;gadugadu&lt;/li&gt;&lt;li&gt;GroupWise&lt;/li&gt;&lt;li&gt;ICQ&lt;/li&gt;&lt;li&gt;IRC&lt;/li&gt;&lt;li&gt;Windows Live&lt;/li&gt;&lt;li&gt;mxit&lt;/li&gt;&lt;li&gt;myspace&lt;/li&gt;&lt;li&gt;sametime&lt;/li&gt;&lt;li&gt;silc&lt;/li&gt;&lt;li&gt;Yahoo!&lt;/li&gt;&lt;li&gt;Yahoo! Japan&lt;/li&gt;&lt;li&gt;zephyr&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0z5C46HlqC8/TiRSdmyjbDI/AAAAAAAAC3w/k35Al233XAQ/s1600/empathy02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-0z5C46HlqC8/TiRSdmyjbDI/AAAAAAAAC3w/k35Al233XAQ/s320/empathy02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;今回はGoogle TalkとWindows Liveを設定してみた。&lt;br /&gt;設定が終わると個人情報の入力画面になる。これは同じネットワーク内にEmpathy利用者がいないのでわからないが、多分ユーザ同士をつなげてくれる機能だと思う。つまり社内とかで自動的に仲間を表示してくれる、的な機能だろう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-y16w9uPsCN8/TiRSeffYxsI/AAAAAAAAC30/pWVcpuo5574/s1600/empathy03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-y16w9uPsCN8/TiRSeffYxsI/AAAAAAAAC30/pWVcpuo5574/s320/empathy03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;同じLAN内同士でチャットする場合（と思う）のアカウントをここで設定する。&lt;br /&gt;&lt;br /&gt;どうでもいいけどこのコアラのイラストは怖いと思うので、別のものに変えたほうが良いと思うのだが・・。&lt;br /&gt;&lt;br /&gt;通常の起動画面はかなりあっさりしていて、Google Talkに近い感じかな。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-s--mDLgv6Rs/TiRScF3Ip7I/AAAAAAAAC3o/kaD_FMXroAQ/s1600/empathy04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-s--mDLgv6Rs/TiRScF3Ip7I/AAAAAAAAC3o/kaD_FMXroAQ/s320/empathy04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Skype】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Skypeとはいわずもがな、最近マイクロソフトが傘下にいれたメッセンジャーだ。&lt;br /&gt;知名度も高いと思う。&lt;br /&gt;&lt;br /&gt;オンライン英会話なんかでもやたら使われているので、一般の人にも相当知れ渡っているはずだ。&lt;br /&gt;&lt;br /&gt;インストールするにはまずSkypeのページへ進む。&lt;br /&gt;&lt;a href="http://www.skype.com/"&gt;http://www.skype.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-p6dArX4Sd9k/TiRVy1NobyI/AAAAAAAAC38/QXfcfhZyMQM/s1600/skype01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-p6dArX4Sd9k/TiRVy1NobyI/AAAAAAAAC38/QXfcfhZyMQM/s320/skype01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Skypeをダウンロード」にマウスオーバーするとサブメニューが表示されるので、「Linux」をクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0jlYKkZXDJg/TiRV3KMmXUI/AAAAAAAAC4A/wxT286ruUiE/s1600/skype02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-0jlYKkZXDJg/TiRV3KMmXUI/AAAAAAAAC4A/wxT286ruUiE/s320/skype02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次に「今すぐダウンロード」にマウスオーバーするとディストリビューションが表示されるので、「Fedora 13+」をクリックする。&lt;br /&gt;これでRPMがダウンロードされる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rsQAADhM3CY/TiRV-18PK5I/AAAAAAAAC4E/tbJoKDGWqc0/s1600/skype03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-rsQAADhM3CY/TiRV-18PK5I/AAAAAAAAC4E/tbJoKDGWqc0/s320/skype03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードしたrpmファイルをダブルクリックしてインストーラを起動する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sKWSgt48L7s/TiRWDXvKpII/AAAAAAAAC4I/IUKIM0k-UbY/s1600/skype04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-sKWSgt48L7s/TiRWDXvKpII/AAAAAAAAC4I/IUKIM0k-UbY/s320/skype04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ヘルプ」「閉じる」「インストール」とボタンが表示されるので、「インストール」ボタンをクリックしよう。&lt;br /&gt;インストール途中、root権限が必要になると、sudo時のパスワードを聞かれるので、いまログインしているユーザのパスワードを入力して進める。&lt;br /&gt;&lt;br /&gt;インストールが終わると「アプリケーション」＞「インターネット」＞「Skype」で起動できる。&lt;br /&gt;&lt;br /&gt;初回起動時は「Skypeエンドユーザ ライセンス契約書」が表示されるので、一通り読んだら「同意する」ボタンで同意しよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8og_NZZC1XE/TiRXXrMPJ4I/AAAAAAAAC4Q/0PLz-EUqQZA/s1600/skype05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-8og_NZZC1XE/TiRXXrMPJ4I/AAAAAAAAC4Q/0PLz-EUqQZA/s320/skype05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;同意後、Skypeが起動するのでアカウントを入力し、ログインする。&lt;br /&gt;Windows版などと同じようなウィンドウでSkypeを使うことができる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--wudBs83YnQ/TiRYAIn_UTI/AAAAAAAAC4Y/dtF157Oq4Vk/s1600/skype06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/--wudBs83YnQ/TiRYAIn_UTI/AAAAAAAAC4Y/dtF157Oq4Vk/s320/skype06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ソーシャル系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Gwibber&lt;/th&gt;&lt;td&gt;マルチアカウントでFacebookやFoursquareなどに対応。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Qwit&lt;/th&gt;&lt;td&gt;Twitterクライアント。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Gwibber】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Gwibber（グィバー）は多くのソーシャル系プラットフォームに対応したソーシャルクライアントだ。&lt;br /&gt;&lt;br /&gt;例えばFacebookのウォール、Twitterのタイムライン、Forsquareのチェックインなどを混在させて表示させることが可能だ。&lt;br /&gt;&lt;br /&gt;Yumexで「gwibber」で検索してインストールする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BHJVCUe7t0g/Tibl2TGrxlI/AAAAAAAAC-E/MFknyrWtzoA/s1600/gwibber01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-BHJVCUe7t0g/Tibl2TGrxlI/AAAAAAAAC-E/MFknyrWtzoA/s320/gwibber01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストール後は「アプリケーション」＞「インターネット」＞「Gwibber Social Client」で起動することができる。&lt;br /&gt;&lt;br /&gt;起動直後は何もアカウントがないので、とりあえずプルダウンからお好みのソーシャルを選択し、アカウントを追加しよう。&lt;br /&gt;&lt;br /&gt;追加できるソーシャルは以下。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flickr&lt;/li&gt;&lt;li&gt;Gowalla&lt;/li&gt;&lt;li&gt;Twitter&lt;/li&gt;&lt;li&gt;StatusNet&lt;/li&gt;&lt;li&gt;Ping.fm&lt;/li&gt;&lt;li&gt;Qaiku&lt;/li&gt;&lt;li&gt;Foursquare&lt;/li&gt;&lt;li&gt;Facebook&lt;/li&gt;&lt;li&gt;FriendFeed&lt;/li&gt;&lt;li&gt;Buzz&lt;/li&gt;&lt;li&gt;Digg&lt;/li&gt;&lt;li&gt;Sina&lt;/li&gt;&lt;li&gt;Identi.ca&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bqMh9xGDzrQ/Tibl3Kt1E7I/AAAAAAAAC-I/cKGo-nsdHUA/s1600/gwibber02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-bqMh9xGDzrQ/Tibl3Kt1E7I/AAAAAAAAC-I/cKGo-nsdHUA/s320/gwibber02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;今回はFlickr、Twitter、Foursquare、Facebook、Buzzを追加してみた。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-h10eQ32AV5M/Tibl3jVOsuI/AAAAAAAAC-M/3Ma-Cg2oCE4/s1600/gwibber03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-h10eQ32AV5M/Tibl3jVOsuI/AAAAAAAAC-M/3Ma-Cg2oCE4/s320/gwibber03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;アカウントの追加が終わったら「閉じる」ボタンで閉じるとメインウィンドウが表示される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vWU473cFtIM/Tibl4MHu3RI/AAAAAAAAC-Q/v4eO1PmCb_o/s1600/gwibber04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-vWU473cFtIM/Tibl4MHu3RI/AAAAAAAAC-Q/v4eO1PmCb_o/s320/gwibber04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ウィンドウ左側に各ソーシャルのフィルタボタンがあるので、見たいソーシャルがあればアイコンをクリックする。そうすると選択したソーシャルのみを表示してくれる。&lt;br /&gt;&lt;br /&gt;画面下段の入力ボックスは、下に表示されているソーシャルアイコンが押されている状態の物に対して発言をするという仕組みになっている。&lt;br /&gt;&lt;br /&gt;このボタンを上手に使えば、つぶやきはFacebookとTwitter、拡散希望はTwitterとBuzz、などと使い分けることができる。なかなか便利だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;【Qwit】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;個人的に重宝しているGwibberだが、たまにクラッシュして二度と起動しないなんてことがあり、どうしたものかと途方にくれていたときに見つけたTwitterクライアントがこのQwit（クイット）だ。&lt;br /&gt;&lt;br /&gt;残念ながらGwibberほど多くのソーシャルサービスには対応していないが、Twitterクライアントとしては十分楽しむことができる。&lt;br /&gt;&lt;br /&gt;インストールはYumexで「qwit」で検索し、インストール。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GTe_3MoTxa0/TjLXVUfZRTI/AAAAAAAADDA/A0Z70atJseY/s1600/qwit01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://3.bp.blogspot.com/-GTe_3MoTxa0/TjLXVUfZRTI/AAAAAAAADDA/A0Z70atJseY/s320/qwit01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストール後は「アプリケーション」＞「インターネット」＞「Qwit」で起動可能だ。&lt;br /&gt;&lt;br /&gt;ちなみにここで選択できるソーシャルは以下の通り。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Twitter&lt;/li&gt;&lt;li&gt;Identi.ca&lt;/li&gt;&lt;li&gt;Custom&lt;/li&gt;&lt;li&gt;Aitu.kz&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;正直言って、この中ではTwitterしか知らない。Aitu.kzに関してはサイト自体が消滅していた。どんなサービスだったのだろうか。ロシア語だし、意外に興味深いサービスだったのかもしれない。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;というわけで、ここは素直にTwitterを選択してアカウントをセッティングしようじゃないか。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;初回起動時にはアカウントの作成画面になるのでTwitterを選択した状態で「Add」ボタンをクリックする。そして「OAuth」ボタンでTwitterに認証してもらう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-g6usHLPImP4/TjLXYpc5WpI/AAAAAAAADDE/Tl-0zsXarBk/s1600/qwit02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-g6usHLPImP4/TjLXYpc5WpI/AAAAAAAADDE/Tl-0zsXarBk/s320/qwit02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダイアログの「Here」リンクをクリックすると、TwitterのOAuth承認画面に進む。ここでTwitterへログインすると承認され、ブラウザには巨大なサイズでPINコードが表示される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jR1UCZLBzTI/TjLXejSvilI/AAAAAAAADDI/xabONGS_Mf4/s1600/qwit03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-jR1UCZLBzTI/TjLXejSvilI/AAAAAAAADDI/xabONGS_Mf4/s320/qwit03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Z9lCQpXutuU/TjLXmjsaNGI/AAAAAAAADDM/kFtnRwtbrEA/s1600/qwit04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-Z9lCQpXutuU/TjLXmjsaNGI/AAAAAAAADDM/kFtnRwtbrEA/s320/qwit04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このPINコードをコピーし、Qwitのダイアログに入力して「OK」ボタンをクリックする。&lt;br /&gt;これでQwitをTwitterクライアントとして使う準備ができた。&lt;br /&gt;&lt;br /&gt;アカウントの認証が終わると真っ白状態で起動する。一度画面の「More」ボタンで更新しよう。あとは300秒ごとに勝手に更新してくれる。&lt;br /&gt;&lt;br /&gt;右下の「Option」ボタンで色々設定を変えることができるので、好みの背景色を設定したりしてみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-szwTE24rYVU/TjLX72I1o2I/AAAAAAAADDQ/hnTdSw5YEcs/s1600/qwit05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-szwTE24rYVU/TjLX72I1o2I/AAAAAAAADDQ/hnTdSw5YEcs/s320/qwit05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ゲーム系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;基本的にエミュレータを紹介するので、まず事前知識としていろいろ注意点がある。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ゲーム系にとどまらず、エミュレータソフトはWindowsでは大いに盛り上がっている。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;例えばファミコンのエミュレータ、MSXのエミュレータ、PC-9801のエミュレータ、X68000のエユレータなど。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;大抵がそのプラットフォームでしか遊べないゲームなどが目的という場合が多いだろう。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;そういう時には、本体は持ってるけど古くて壊れてて起動しない、ゲーム自体は持ってるけど本体がない、なんてのを、このエミュレータソフトが解決してくれるわけだ。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;エミュレータ自体は合法であり、使い方はROMカセットやディスクのデータを吸いだし、そのファイルを読み込んで使う。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ただしこのROMファイル、自分が所有しているものを自分もしくは業者に吸いだしてもらって、自分だけが使うことが前提だ。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;もし他者に配ったり売ったりしたら犯罪になり、お縄頂戴と相成るので注意しよう。当然インターネット上にダウンロード可能な状態でROMファイルをおいておくだけでも違法ということになるので、取扱注意。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;基本的にエミュレータは「大人のソフト」であることを強く意識しよう。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;もし中古屋でやってみたいソフトが安く売っていたら、ひとまず購入し、&lt;a href="http://hp.vector.co.jp/authors/VA005758/"&gt;吸出し業者&lt;/a&gt;に依頼するのが一番気が楽だ。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Snes9x&lt;/th&gt;&lt;td&gt;スーパーファミコンのエミュレータ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Gens&lt;/th&gt;&lt;td&gt;メガドライブのエミュレータ。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Snes9x】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Snes9xはスーパーファミコンのエミュレータだ。Windowsではかなり有名だが、まさかLinux版があるとは思わなかった。&lt;br /&gt;&lt;br /&gt;インストールはYumexで「snes9x」で検索。インストール後は「アプリケーション」＞「ゲーム」＞「Snes9x」で起動可能。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RAjhh3ZVfpM/TjNzpUZTn3I/AAAAAAAADDs/rV2WoF-srBo/s1600/snes9x001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-RAjhh3ZVfpM/TjNzpUZTn3I/AAAAAAAADDs/rV2WoF-srBo/s320/snes9x001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Windows版と違ってタイトル画面が綺麗だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-TA19Zw6Ztvc/TjNzuwZkDZI/AAAAAAAADDw/18jfIsLAraQ/s1600/snes9x002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-TA19Zw6Ztvc/TjNzuwZkDZI/AAAAAAAADDw/18jfIsLAraQ/s320/snes9x002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このままでは画面が小さいので、「View」＞「Change Size」で「Correct Aspect」の「2x」を選択し、正しい比率で2倍のサイズにしておくと便利だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-eEDzlY3MW8c/TjNzynTM8HI/AAAAAAAADD0/x8beADrx_94/s1600/snes9xsize.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-eEDzlY3MW8c/TjNzynTM8HI/AAAAAAAADD0/x8beADrx_94/s320/snes9xsize.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;他にもいろいろオプションがあるので自分好みに変更しておこう。&lt;br /&gt;「Option」 ＞「Preference」で設定画面が開く。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6ItXLhVnnQY/TjNz_lmGazI/AAAAAAAADD4/9PKtHxT6_v4/s1600/snes9x003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-6ItXLhVnnQY/TjNz_lmGazI/AAAAAAAADD4/9PKtHxT6_v4/s320/snes9x003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;キー設定は、それぞれのテキストフィールドにカーソルを当てて、割り当てたいキーを叩くだけで設定できる。&lt;br /&gt;&lt;br /&gt;手持ちの吸出し済みROMをいくつか読み込んでみた。問題なく動く。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-LMHX3VUFTaU/TjN0DftyADI/AAAAAAAADD8/bNUklxXFj6o/s1600/snes9x004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-LMHX3VUFTaU/TjN0DftyADI/AAAAAAAADD8/bNUklxXFj6o/s320/snes9x004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Wizardry VI Bane of the Cosmic Forge&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lUaVSnPkqVc/TjN0EwtqCzI/AAAAAAAADEA/oXeY4uOw1r4/s1600/snes9x005.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-lUaVSnPkqVc/TjN0EwtqCzI/AAAAAAAADEA/oXeY4uOw1r4/s320/snes9x005.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Tactics Ogre&lt;/div&gt;&lt;br /&gt;ただしグラフィックボードがしょぼかったり、凄いグラフィックボードでもLinuxのドライバがなければ、動きががたつくので、そういう場合は画面を小さくするか、誰かのせいにして諦めよう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Gens】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Gens（ジェンズ）はセガ メガドライブのエミュレータだ。なぜGensというかというと、アメリカではメガドライブではなく、ジェネシス（Genesis）として発売されており、その省略形としてGensと呼ぶようだ。&lt;br /&gt;&lt;br /&gt;インストールはYumexで「gens」でOK。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tCXXtCHLR8M/TjN32lYwuhI/AAAAAAAADEI/tpLEVGQkuik/s1600/gens001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-tCXXtCHLR8M/TjN32lYwuhI/AAAAAAAADEI/tpLEVGQkuik/s320/gens001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストール後は「アプリケーション」＞「ゲーム」＞「Gens」で起動可能。&lt;br /&gt;初回起動は画面がおかしくなることがある。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KH9AI2-_LJU/TjN4A7gCTOI/AAAAAAAADEM/IVcyr64ekDs/s1600/gens002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-KH9AI2-_LJU/TjN4A7gCTOI/AAAAAAAADEM/IVcyr64ekDs/s320/gens002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;こういう場合は「Graphic」から「OpenGL」にチェックを入れてみよう。もしかしたら正しく表示されるかも知れない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cv93mdXMqqw/TjN4NQjfKmI/AAAAAAAADEQ/1qdYxo9EK8Y/s1600/gens003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-cv93mdXMqqw/TjN4NQjfKmI/AAAAAAAADEQ/1qdYxo9EK8Y/s320/gens003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;いくつか手持ちのゲームを起動してみたが、問題なく動く。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-n2-Hot1GE-c/TjN40ybYUTI/AAAAAAAADEc/zi3EBCM11nc/s1600/gens004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-n2-Hot1GE-c/TjN40ybYUTI/AAAAAAAADEc/zi3EBCM11nc/s320/gens004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The Immortal（邦題：ウィザードオブイモータル）&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-M6C1QG_5W4s/TjN4qNQVCZI/AAAAAAAADEY/tFLD-bSOZo0/s1600/gens005.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-M6C1QG_5W4s/TjN4qNQVCZI/AAAAAAAADEY/tFLD-bSOZo0/s320/gens005.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;PhantasyStar II（ファンタシースターII 還らざる時の終わりに）&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■メーラ系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Evolution&lt;/th&gt;&lt;td&gt;GNOMEデフォのPIM。MS Outlook好きにはピッタリかも。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Sylpheed&lt;/th&gt;&lt;td&gt;超軽量かつシンプルなメーラ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Opera&lt;/th&gt;&lt;td&gt;Operaメーラ。好みが分かれるが使い勝手は良い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Thunderbird&lt;/th&gt;&lt;td&gt;いわずと知れた超有名メーラー。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Evolution】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Evolution（エヴォリューション）は最初からインストールされているPIMだ。PIMというのは、Personal Information Manage、つまり個人の情報管理といういみで、そういう点ではMicrosoft Officeに入っている、Outlookに近いかもしれない。&lt;br /&gt;&lt;br /&gt;と言うわけで早速起動してみる。&lt;br /&gt;「アプリケーション」＞「オフィス」＞「Evolutionのメールとカレンダ」から起動できる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FTUxHXjTWgc/TjOODTPjnuI/AAAAAAAADEo/_4YDNPb2PZI/s1600/evo001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-FTUxHXjTWgc/TjOODTPjnuI/AAAAAAAADEo/_4YDNPb2PZI/s320/evo001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;初回起動するといろいろ聞かれるので、必要な情報を入力していこう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EZAJ5JBuFTU/TjOOJc6K3YI/AAAAAAAADEs/2i0J23mXGqg/s1600/evo002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-EZAJ5JBuFTU/TjOOJc6K3YI/AAAAAAAADEs/2i0J23mXGqg/s320/evo002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;こんなにデカくしなくてもいいんじゃないかと思うくらい、Linuxのウィンドウやダイヤログってデカいのはなぜなんだろうか？&lt;br /&gt;&lt;br /&gt;とりあえず「進む」ボタンで進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ua22MePVI80/TjOOY0LD6mI/AAAAAAAADEw/Gdoxuj9vIM8/s1600/evo003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-ua22MePVI80/TjOOY0LD6mI/AAAAAAAADEw/Gdoxuj9vIM8/s320/evo003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;初回起動でバックアップはないのでこのまま「進む」ボタンで進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NJnUyEVad8A/TjOQ30pVPXI/AAAAAAAADE4/S0m7SHfaUes/s1600/evo004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-NJnUyEVad8A/TjOQ30pVPXI/AAAAAAAADE4/S0m7SHfaUes/s320/evo004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;基本設定として、ユーザ名とメールアドレスを入力して「進む」ボタンで進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EN_vssb1q6s/TjOQ97m3L3I/AAAAAAAADE8/Gtwjyq_UqOA/s1600/evo005.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-EN_vssb1q6s/TjOQ97m3L3I/AAAAAAAADE8/Gtwjyq_UqOA/s320/evo005.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;POPアカウントも同じように設定して「進む」ボタンで進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2pFalWDx25I/TjORKu7SHII/AAAAAAAADFA/TTiH3DRubzM/s1600/evo006.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-2pFalWDx25I/TjORKu7SHII/AAAAAAAADFA/TTiH3DRubzM/s320/evo006.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;個人的にメール受信するのが嫌いなので自動受信は120分くらいにしてあるけど、ここらへんは個人のお好みで。&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;死ぬまでメールを受信しない&lt;/span&gt;&lt;/b&gt;のも当然アリだ。&lt;br /&gt;&lt;br /&gt;「進む」ボタンで次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9TtorhBUNo8/TjORXpWuJzI/AAAAAAAADFE/095xX5WUSSc/s1600/evo007.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-9TtorhBUNo8/TjORXpWuJzI/AAAAAAAADFE/095xX5WUSSc/s320/evo007.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次に送信設定。適宜設定して「進む」ボタンで次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-3X56pe686MQ/TjORfOroFZI/AAAAAAAADFI/RCDtcKfxoL0/s1600/evo008.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-3X56pe686MQ/TjORfOroFZI/AAAAAAAADFI/RCDtcKfxoL0/s320/evo008.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;最後に、これらの設定に名前を付けて保存する。つまりプロフィル名だ。&lt;br /&gt;ちゃんとした適切な社会的に許される範囲の名前を付けたら「進む」ボタンで次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-F7qQhmruMig/TjORq1PdFUI/AAAAAAAADFM/MakAwn_MmF4/s1600/evo009.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-F7qQhmruMig/TjORq1PdFUI/AAAAAAAADFM/MakAwn_MmF4/s320/evo009.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;わざわざ最後に初期設定完了のお祝いをしてくれる。&lt;br /&gt;「適用」ボタンですべての設定を反映させる。&lt;br /&gt;&lt;br /&gt;そして起動すると、レガシーなレイアウトのくせにやたら横長なEvolutionが起動する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-L8pq5lvcgWA/TjOR9UDeNVI/AAAAAAAADFQ/dcgy1VTt9Zg/s1600/evo010.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://2.bp.blogspot.com/-L8pq5lvcgWA/TjOR9UDeNVI/AAAAAAAADFQ/dcgy1VTt9Zg/s320/evo010.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;PIMなのでカレンダーなども用意されていて、なかなか便利。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kPOh2Zf5ocw/TjOSFaYfXjI/AAAAAAAADFU/atuTGF9CVV4/s1600/evo011.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://3.bp.blogspot.com/-kPOh2Zf5ocw/TjOSFaYfXjI/AAAAAAAADFU/atuTGF9CVV4/s320/evo011.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Fedoraには最初からインストールされているという事もあり、愛用している人も多いソフトだ。&lt;br /&gt;メールが大嫌いでもカレンダーを使ったりメモをとるのには良いかもしれない。&lt;br /&gt;&lt;br /&gt;いろいろな設定をいじると、デスクトップに表示されるカレンダーと同期が取れるらしい。&lt;br /&gt;この件はまた後日改めて。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Sylpheed】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sylpheed（シルフィード）はとにかく軽量なメーラだ。メインのメーラがクラッシュした際などには重宝する存在である。&lt;br /&gt;&lt;br /&gt;使う使わない問わず、念のためインストールしておく事をお勧める。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;※メールなんていう古臭い役立たずのものを予め二重化しておかないといけないという、この現実が大嫌いだ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sylpheedの迷惑メール対策は少々マイナーなので、もしメインでSylpheedを使うのであれば色々苦労することになるが、まぁそこまでしてメールなんていうものを大事に扱う必要もないだろうから、ここでは特に説明はしない。&lt;br /&gt;&lt;br /&gt;そもそも迷惑じゃないメールなんて存在しないと思っている。&lt;br /&gt;俺に取っては&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;すべてのメールは迷惑メール&lt;/span&gt;&lt;/b&gt;だ。&lt;br /&gt;&lt;br /&gt;というわけで、インストールはYumexで「sylpheed」でOK。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8-jPN079Z9U/TjOXWJNRgdI/AAAAAAAADFc/7nCNtTAUMkI/s1600/sylpheed001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-8-jPN079Z9U/TjOXWJNRgdI/AAAAAAAADFc/7nCNtTAUMkI/s320/sylpheed001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「アプリケーション」＞「インターネット」＞「Sylpheed」で起動。&lt;br /&gt;&lt;br /&gt;初回起動ではメールボックスなどのアカウント設定の画面が自動的に表示される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3_nQ-n5lnao/TjOXcNT33TI/AAAAAAAADFg/k13QpAtyQCs/s1600/sylpheed002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-3_nQ-n5lnao/TjOXcNT33TI/AAAAAAAADFg/k13QpAtyQCs/s320/sylpheed002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Sylpheedの場合、メールボックスの設定から始められるので、たとえばDropboxなどのクラウド型ストレージなんかを指定しておけば、別の場所にあるSylpheedから同じ状態でメールの送受信、確認ができる。&lt;br /&gt;&lt;br /&gt;まぁメールなんていうタダの7bitのコードを確認できようが出来なかろうが、そんなことは俺の知ったことではないのだが。&lt;br /&gt;&lt;br /&gt;次はアカウントの設定。入力したら「進む」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-65-6Unx-z8Q/TjOXhBLW5HI/AAAAAAAADFk/Gr-DscgpvyY/s1600/sylpheed003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-65-6Unx-z8Q/TjOXhBLW5HI/AAAAAAAADFk/Gr-DscgpvyY/s320/sylpheed003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そしてアカウントの続き。入力したら「進む」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-h0I6yxIBGnI/TjOXlreWuRI/AAAAAAAADFo/eSChWzfaOdM/s1600/sylpheed004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-h0I6yxIBGnI/TjOXlreWuRI/AAAAAAAADFo/eSChWzfaOdM/s320/sylpheed004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;最後に確認画面とおもいきや、報告画面だ。事後報告。&lt;br /&gt;「閉じる」ボタンで閉じる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GY22MF17Umw/TjOXpes0OEI/AAAAAAAADFs/pzoO3SE65SQ/s1600/sylpheed005.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-GY22MF17Umw/TjOXpes0OEI/AAAAAAAADFs/pzoO3SE65SQ/s320/sylpheed005.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これでSylpheedを使うことができる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VRhqy7Ee6dw/TjOXuADBBtI/AAAAAAAADFw/k6GL2KUoaUE/s1600/sylpheed006.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-VRhqy7Ee6dw/TjOXuADBBtI/AAAAAAAADFw/k6GL2KUoaUE/s320/sylpheed006.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;レイアウトもレガシーな3ペインではなく、ワイド画面用レイアウトも用意されている。&lt;br /&gt;「表示」＞「レイアウト」＞「縦3列」で切り替え可能だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Js22lySew8k/TjOXz7K0cMI/AAAAAAAADF0/B0EsfZLNvKY/s1600/sylpheed007.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-Js22lySew8k/TjOXz7K0cMI/AAAAAAAADF0/B0EsfZLNvKY/s320/sylpheed007.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;動作は軽快。サクサク動くので良い。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Opera】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Opera（オペラ）はみんな知っていると思う。Googleも認めたクソブラウザの代表格だ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Acid3"&gt;ACID&lt;/a&gt;に対応していることや、いち早くCSS3に対応など、いろいろなニュースをよく目にするのだが、ダウンロードしてそれらのページを正しく処理できた試しがない。&lt;br /&gt;&lt;br /&gt;そもそも&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;1ページ表示するのに1分以上&lt;/span&gt;&lt;/b&gt;かかったり、表示しきれず&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;タブがずっとローディング&lt;/b&gt;&lt;/span&gt;になったりなんてことがザラだ。&lt;br /&gt;&lt;br /&gt;これを&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;ドヤ顔で世界中に配布&lt;/b&gt;&lt;/span&gt;しているという、ノルウェー人はどういうつもりなのだろうか。&lt;br /&gt;しかもフォーラムに質問しようと思ってMyOperaなんかに登録したが最後。インタフェース上から&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;退会出来ない&lt;/b&gt;&lt;/span&gt;。メールをだして退会申請しないといけないという手の抜き様。&lt;br /&gt;&lt;br /&gt;われわれ日本人からすると&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;理解に苦しむ仕様&lt;/span&gt;&lt;/b&gt;になっている。&lt;br /&gt;&lt;br /&gt;ではどうしてそんなクソブラウザを紹介するのかというと、このOperaメーラ、&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;意外に使いやすい&lt;/b&gt;&lt;/span&gt;。&lt;br /&gt;メールなんていう、&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;存在自体がゴミ&lt;/b&gt;&lt;/span&gt;の物は&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;手早く処理するべき&lt;/b&gt;&lt;/span&gt;だ。&lt;br /&gt;そのためのギミックがこのOperaには組み込まれている。&lt;br /&gt;&lt;br /&gt;つまりこのOpera、俺みたいに&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;メールが嫌いな奴が作った&lt;/b&gt;&lt;/span&gt;に違いない！と言えるほど、&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;メールを軽くぞんざいに手ひどく扱ってくれる&lt;/b&gt;&lt;/span&gt;ものに仕上がっている。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;これは重宝！&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;というわけで、早速インストール。&lt;br /&gt;インストールするにはブラウザでOperaのサイトに行き、インストーラをダウンロードしてくる。&lt;br /&gt;&lt;br /&gt;OperaクソブラウザのURLはこちら。&lt;br /&gt;&lt;a href="http://jp.opera.com/"&gt;http://jp.opera.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OperaクソブラウザのHOMEからダウンロードボタンをクリックしてダウンロードページへ進む&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZrDBu88YNKE/TjPZegveGEI/AAAAAAAADF8/N8l8Tm9vxt4/s1600/opera001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-ZrDBu88YNKE/TjPZegveGEI/AAAAAAAADF8/N8l8Tm9vxt4/s320/opera001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードページではOSのディストリビューションを選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-SsFLUCTC2gk/TjPZllJZKBI/AAAAAAAADGA/-pfKruZAxbA/s1600/opera002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-SsFLUCTC2gk/TjPZllJZKBI/AAAAAAAADGA/-pfKruZAxbA/s320/opera002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロード開始ページでしばらくまつとダウンロードが開始される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-crdRq5Vf1NE/TjPZpPQyWsI/AAAAAAAADGE/sfpW7kJ9hMQ/s1600/opera003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-crdRq5Vf1NE/TjPZpPQyWsI/AAAAAAAADGE/sfpW7kJ9hMQ/s320/opera003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ちなみに全く開始されない時があるが、そういう時は一旦外に出て深呼吸し、コンビニでペプシでも買って帰り、リラックスしてもう一度最初からやり直すと良いだろう。怒ってはいけない。何しろクソブラウザってことは最初から分かりきっているんだから。&lt;br /&gt;&lt;br /&gt;ダウンロードが終わったらOperaクソブラウザのページはとじてしまおう。開いているとクソまみれになるかもしれないから注意だ。&lt;br /&gt;&lt;br /&gt;ダウンロードしたrpmファイルをダブルクリックして起動。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0dS5X5_zM78/TjPZyGl7spI/AAAAAAAADGI/uVr_YFxI4zM/s1600/opera004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-0dS5X5_zM78/TjPZyGl7spI/AAAAAAAADGI/uVr_YFxI4zM/s320/opera004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストール中、例によってroot権限が必要になる。&lt;br /&gt;その場合、rootのパスワードではなく、sudoのパスワード、つまり今ログインしているユーザのパスワードを入力する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-bVR4pKugz_o/TjPZ4pkVAGI/AAAAAAAADGM/_Ifv_n-jim0/s1600/opera005.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-bVR4pKugz_o/TjPZ4pkVAGI/AAAAAAAADGM/_Ifv_n-jim0/s320/opera005.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「続行」ボタンをクリックして次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-EwLk37UI39g/TjPaLZaCU-I/AAAAAAAADGQ/0I5zjReDh5Q/s1600/opera006.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-EwLk37UI39g/TjPaLZaCU-I/AAAAAAAADGQ/0I5zjReDh5Q/s320/opera006.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正直Opera自体信頼できるかと言われれば否！と応えたいところだが、そんなこと言ってると何時まで経ってもクソブラウザでメールを受信することが出来ないので、ここは素直にsudoパスワード（今ログインしているユーザのパスワード）を入力し、「認証」ボタンをクリックだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iPpJ1er_ZsE/TjPaej1-uAI/AAAAAAAADGU/VMRxEdyNyj0/s1600/opera007.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-iPpJ1er_ZsE/TjPaej1-uAI/AAAAAAAADGU/VMRxEdyNyj0/s320/opera007.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そして利用規約。ここだけ何故か英語になる。一応最後まで目を通しておくのが礼儀だ。&lt;br /&gt;Operaに礼儀正しくして何か得するわけではないが、これもクソブラウザを使うために通過せざるをえない儀式なので、同意しても良いとおもったら「同意します」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-at9gSslqmBc/TjPawL7C35I/AAAAAAAADGY/e4mHj3NJVzM/s1600/opera008.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-at9gSslqmBc/TjPawL7C35I/AAAAAAAADGY/e4mHj3NJVzM/s320/opera008.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;同意すると待ち構えていたかのように、即座にクソブラウザのOperaが起動する。&lt;br /&gt;ちなみにこのサイト、「スペースキーで次に勧めます」的なメッセージが表示されるのだが、次に進んではいけない。&lt;br /&gt;&lt;br /&gt;なんと、超巨大な画像ファイルを読み込み始め、トラフィックをパンパンにしようとする。&lt;br /&gt;全くもってOperaが何をしたいのかが理解出来ない。&lt;br /&gt;&lt;br /&gt;Operaを使えなバカでかい画像をスムースに表示出来ますよ！と言いたいのかもしれないが、1枚の画像を表示するために1分以上待つのは俺でなくても嫌がるはずだ。さすがクソブラウザ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aV79DDC365s/TjPbPU-RnFI/AAAAAAAADGc/CeA35fhJrz0/s1600/opera009.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-aV79DDC365s/TjPbPU-RnFI/AAAAAAAADGc/CeA35fhJrz0/s320/opera009.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;早速メールの設定を行おう。&lt;br /&gt;左上にある「Opera」ボタンをクリックし、「メールとチャットアカウントの編集」をクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-bSzIMV-_IGo/TjPbb7BG0TI/AAAAAAAADGg/TUqRfLugkoU/s1600/opera010.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-bSzIMV-_IGo/TjPbb7BG0TI/AAAAAAAADGg/TUqRfLugkoU/s320/opera010.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;まぁこのダイアログ見れば、誰でもクソブラウザの片鱗を分かっていただけると思う。&lt;br /&gt;人様がインストールしたフォントを勝手に選択し、許可もなく無断使用するという暴挙だ。&lt;br /&gt;漢字がすべて「みかちゃんフォント」になってしまっている。&lt;br /&gt;&lt;br /&gt;ノルウェー人は日本と戦争がしたいのかどうかわからんが、とりあえず「はい」ボタンで次にすすもう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sUH7dN3zHTw/TjPbz99eEzI/AAAAAAAADGk/sOQqxpTKDmE/s1600/opera011.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-sUH7dN3zHTw/TjPbz99eEzI/AAAAAAAADGk/sOQqxpTKDmE/s320/opera011.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;メール&lt;/li&gt;&lt;li&gt;ニュースグループ&lt;/li&gt;&lt;li&gt;メールをインポート&lt;/li&gt;&lt;li&gt;チャット（IRC）&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;と設定項目があるが、ここでは「メール」を選択した状態で「次へ」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rMy430lDvfI/TjPcCR2mgxI/AAAAAAAADGo/FuO0R-jZl9E/s1600/opera012.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-rMy430lDvfI/TjPcCR2mgxI/AAAAAAAADGo/FuO0R-jZl9E/s320/opera012.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;名前とメールアドレス、所属（ここもフォントがおかしい）を適当に入力して「次へ」ボタンで次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Z46ejJnQDYs/TjPcN8hi6RI/AAAAAAAADGs/XUsRQFII1sM/s1600/opera013.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-Z46ejJnQDYs/TjPcN8hi6RI/AAAAAAAADGs/XUsRQFII1sM/s320/opera013.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;メールサーバへのログインで使う、ログイン名とパスワードを設定し、「次へ」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-sv9bbNXm0Pc/TjPcXog5q8I/AAAAAAAADGw/J9klYid5BjU/s1600/opera014.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-sv9bbNXm0Pc/TjPcXog5q8I/AAAAAAAADGw/J9klYid5BjU/s320/opera014.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;受信サーバ（POP3）と送信サーバ（SMTP）を設定し、「完了」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZPUZ494i5ow/TjPck2bUA6I/AAAAAAAADG0/-n6JlpF8Vu0/s1600/opera015.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-ZPUZ494i5ow/TjPck2bUA6I/AAAAAAAADG0/-n6JlpF8Vu0/s320/opera015.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;レガシーなレイアウトでOperaメーラが起動した。&lt;br /&gt;早速日本人を馬鹿にしているフォント設定を正しく直そうじゃないか。&lt;br /&gt;&lt;br /&gt;「Opera」＞「設定」＞「設定」を選択し、「詳細設定」タブの「フォント」を選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VzHz52kGgaE/TjPc88e43gI/AAAAAAAADG4/LaRHr5J4BSs/s1600/opera016.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-VzHz52kGgaE/TjPc88e43gI/AAAAAAAADG4/LaRHr5J4BSs/s320/opera016.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;呆れてしまうようなクソ設定になっているので、非常に面倒くさいが、フォント設定を直しておこう。&lt;br /&gt;H1～H6まですべて「みかちゃんフォント」になってしまっている。どうしてこのフォントが選ばれたのかが極めて謎だ。&lt;br /&gt;&lt;br /&gt;ちなみに「表示」＞「本文の表示形式」で「一覧の右にメッセージを表示」にチェックを入れると、ワイド画面対応のレイアウトになってくれる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-O-Ki2nOQSpA/TjPdaLZCouI/AAAAAAAADG8/6moMD_lJkxs/s1600/opera017.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-O-Ki2nOQSpA/TjPdaLZCouI/AAAAAAAADG8/6moMD_lJkxs/s320/opera017.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;詳しい使い方だが、以前Operaメーラの使い方や便利なところを解説しているので、こちらを見てもらえれば良いかと。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;メールを無断で無許可に削除してくれるThunderbirdからOperaに移行する【1/3】&lt;/b&gt;&lt;br /&gt;&lt;a href="http://torhamzedd.blogspot.com/2010/06/thinderbirdopera13.html"&gt;http://torhamzedd.blogspot.com/2010/06/thinderbirdopera13.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Thunderbird】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Thunderbird（サンダーバード）は言わずと知れた有名なメーラだ。無償メーラといえば大抵このThunderbirdを思いつく人も多いのではないだろうか。&lt;br /&gt;&lt;br /&gt;まぁ、たかが&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;メールというゴミ&lt;/b&gt;&lt;/span&gt;を扱うソフトがいちいち有名とか無名とか言ってもしょうがないと思うんが。&lt;br /&gt;&lt;br /&gt;で、ThunderbirdのインストールはYumexで「thunderbird」で検索。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fzfzz2iCnh0/TjPfHfsLguI/AAAAAAAADHE/fy2rI91CfpQ/s1600/thunderbird001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-fzfzz2iCnh0/TjPfHfsLguI/AAAAAAAADHE/fy2rI91CfpQ/s320/thunderbird001.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;起動は「アプリケーション」＞「インターネット」＞「Thunderbird」でOKだ。&lt;br /&gt;30秒ほど待たされたあとに、例によってアカウントの設定画面になる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9Z52Etn61XY/TjPffLCaKBI/AAAAAAAADHI/yN-38ApYHDg/s1600/thunderbird002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-9Z52Etn61XY/TjPffLCaKBI/AAAAAAAADHI/yN-38ApYHDg/s320/thunderbird002.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「続ける」ボタンをクリックすると、入力したアカウントでいきなり存在確認が始まり、サーバの情報などをすべて取ってきてくれる。これはこれで便利かもしれない。&lt;br /&gt;&lt;br /&gt;「アカウント作成」ボタンをクリックすると、アカウントの作成は終わりだ。&lt;br /&gt;勝手に無許可にメールの受信が始まる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5HR2Lix3Bvg/TjPil6Ct7QI/AAAAAAAADHU/pEhiIzydRzM/s1600/thunderbird003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-5HR2Lix3Bvg/TjPil6Ct7QI/AAAAAAAADHU/pEhiIzydRzM/s320/thunderbird003.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;画面右下には「あなたの権利について」という不思議なボタンがあるが、クリックすると別タブでエラー画面みたいなページが表示される。一応一通り読んでおくと寝覚めが良いかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-n5WgSkMWBds/TjPiqF_uL4I/AAAAAAAADHY/fif9KlZXrLA/s1600/thunderbird004.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-n5WgSkMWBds/TjPiqF_uL4I/AAAAAAAADHY/fif9KlZXrLA/s320/thunderbird004.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;まぁたかだか&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;メールなんていう汚物&lt;/span&gt;&lt;/b&gt;のために、いちいち権利がどうだとか言われたくないのだが、一応念のためボタンだけはクリックしておこう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■最後に&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ずいぶん長い時間がかかってしまったけど、これで一通り、WindowsからLinuxへの移行のヒントになるアイデア、情報などをまとめたつもりだ。&lt;br /&gt;&lt;br /&gt;是非ご参考にされたし。&lt;br /&gt;&lt;br /&gt;近々、開発者のためのLinuxの設定方法をやる予定。こちらは相当マニアックだが、誰でも簡単に便利な環境をつくることができるので、乞うご期待。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-1763822106569358669?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/1763822106569358669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/1763822106569358669'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/07/windows-fedora15-66.html' title='Windowsにサヨナラだ！！〜 Fedora15 〜【6/6】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-f0H02GtG2PE/TjLR1dppU3I/AAAAAAAADCo/K6Sf1u5FsSo/s72-c/font_migu01.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-8609261426450792414</id><published>2011-07-05T14:23:00.046+09:00</published><updated>2011-07-29T16:04:56.147+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IBus'/><category scheme='http://www.blogger.com/atom/ns#' term='p7z'/><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='全角'/><category scheme='http://www.blogger.com/atom/ns#' term='半角'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='Audacity'/><category scheme='http://www.blogger.com/atom/ns#' term='Regexxer'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><category scheme='http://www.blogger.com/atom/ns#' term='Skype'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><category scheme='http://www.blogger.com/atom/ns#' term='sweethome3d'/><category scheme='http://www.blogger.com/atom/ns#' term='GIMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Zenkaku_Hankaku'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Blender'/><category scheme='http://www.blogger.com/atom/ns#' term='RabbitVCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora15'/><category scheme='http://www.blogger.com/atom/ns#' term='mozc'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Windowsにサヨナラだ！！〜 Fedora15 〜【5/6】</title><content type='html'>さて、少し時間が空いてしまったが、早速再開だ。&lt;br /&gt;&lt;br /&gt;今回何をするのかというと、Windowsを使っていた時の作業を違和感なく進められるように、いろいろなアプリをインストール、設定し、使ってみようと思う。&lt;br /&gt;&lt;br /&gt;まずは準備段階として、基本的なアプリをインストールする。&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;■準備&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ここでインストールするアプリは以下のとおりだ。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th nowrap=""&gt;Google Chrome&lt;/th&gt;&lt;td&gt;Googleのブラウザ、クローム。表示が早いので人気だ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;ibus-mozc&lt;/th&gt;&lt;td&gt;いわゆるGoogle日本語入力のLinux版。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;vim-X11&lt;/th&gt;&lt;td&gt;エディタ。vimのGUI版。viやvim好きには必須かも。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;p7z、unrar&lt;/th&gt;&lt;td&gt;zipより圧縮率の高い7z形式の圧縮解凍が可能なp7zと、rar形式の解凍を可能にするunrar。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Dropbox&lt;/th&gt;&lt;td&gt;要するにファイルサーバ。高機能なのにシンプルで大人気。クラウドの入門にピッタリ。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;順にインストールしよう。&lt;br /&gt;Google Chromeから開始だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Google Chrome】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;インストールは簡単。まずFireFoxを起動し、右上の検索窓から「chrome」を検索する。&lt;br /&gt;検索したら画面に現れた「Google Chrome ダウンロード」をクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hk_FRIbJ_wc/ThMVgWo3_YI/AAAAAAAACr8/dUGLaEqxsYc/s1600/chrome01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-hk_FRIbJ_wc/ThMVgWo3_YI/AAAAAAAACr8/dUGLaEqxsYc/s320/chrome01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次に表示されたページで、右上にある「Google Chromeを無料ダウンロード」ボタンをクリックする。&lt;br /&gt;下に小さく「Linux（Debian/Ubuntu/Fedora/OpenSUSE）用」と書かれている事を確認しよう。&lt;br /&gt;※ちなみに左から「デビアン」「ウブントゥ」「フェドラ」「オープンスーゼ」と読む&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oQYd3RCFSNk/ThMVju7moGI/AAAAAAAACsA/uP5QGX0CaHI/s1600/chrome02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-oQYd3RCFSNk/ThMVju7moGI/AAAAAAAACsA/uP5QGX0CaHI/s320/chrome02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次はダウンロードするパッケージの種類だ。DebianやUbuntu用のdebファイル、FedoraやOpenSUSE用のrpmがそれぞれ32ビット版、64ビット版あるので、適切な物をチェックし、「同意してインストール」ボタンをクリックする。&lt;br /&gt;今回はFedora15の32ビット版を使用しているので、「32ビット .rpm（Fedora/openSUSE 用）」をチェックした。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dfrbDyFuhp8/ThMVm3EYbDI/AAAAAAAACsE/K2buAhixhRc/s1600/chrome03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-dfrbDyFuhp8/ThMVm3EYbDI/AAAAAAAACsE/K2buAhixhRc/s320/chrome03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次に選択したパッケージがダウンロードされるが、このまま実行させてしまおう。&lt;br /&gt;「OK」ボタンをクリックし、ダウンロードしたら即座にインストールだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-q0AcmhAkPS4/ThMVq_5HNtI/AAAAAAAACsM/P9q0n7xUGx0/s1600/chrome04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-q0AcmhAkPS4/ThMVq_5HNtI/AAAAAAAACsM/P9q0n7xUGx0/s320/chrome04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;15秒ほど待つとインストールが始まる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-7DcKOD1UG_g/ThMVrYKifdI/AAAAAAAACsQ/tFTPAaWd_FY/s1600/chrome05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-7DcKOD1UG_g/ThMVrYKifdI/AAAAAAAACsQ/tFTPAaWd_FY/s320/chrome05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;途中で「追加の検証が必要です」と言われるので、検証するために「続行」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z6ik9sZMMIY/ThMVr8mFrdI/AAAAAAAACsU/gOswWqrkGzU/s1600/chrome06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-z6ik9sZMMIY/ThMVr8mFrdI/AAAAAAAACsU/gOswWqrkGzU/s320/chrome06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「署名付きのパッケージをインストールするには認証が必要です」と表示されるので、パスワードを入力するのだが、注意がある。&lt;br /&gt;&lt;br /&gt;Fedora14などではrootのパスワードを入力し、rootとしてインストールしていたが、Fedora15ではデフォルトでsudoが使われるようになったらしい（以前からそうだったっけ？）。&lt;br /&gt;&lt;br /&gt;つまりここでは自分のアカウントのパスワードを入力しないといけない。&lt;br /&gt;素直に入力して次に進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-sfMDqUbtcV8/ThMVsUo_mvI/AAAAAAAACsY/XeKBD7UEm-k/s1600/chrome07.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-sfMDqUbtcV8/ThMVsUo_mvI/AAAAAAAACsY/XeKBD7UEm-k/s320/chrome07.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そして無事にGoogle Chromeがインストールされた。「インストールが終りました」的なメッセージは一切表示されないので、ダイアログが消えたらインストール終了だ。FireFoxはとじてしまおう。&lt;br /&gt;&lt;br /&gt;このインストールでGoogle Chromeのリポジトリが生成されるので、次回何らかのアップデートがあった場合、自動的にGoogle Chromeもアップデートに含まれるようになる。便利だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UAJyvhKyFrQ/ThMVqgbNIHI/AAAAAAAACsI/o62O9lZbllk/s1600/chrome08.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-UAJyvhKyFrQ/ThMVqgbNIHI/AAAAAAAACsI/o62O9lZbllk/s320/chrome08.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【ibus-mozc】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて次はIMEだ。&lt;br /&gt;&lt;br /&gt;Fedora15デフォルトのIMEも悪くはないが、せっかくならGoogle日本語入力的なフリーなIMEを入れてしまおうじゃないか。少なくとも「ことえり」や「MS IME」などよりかは遥かに使い勝手が良い。そりゃATOKには負けるけど。&lt;br /&gt;&lt;br /&gt;で、インストールはyumexで「ibus-mozc」を検索してインストールしよう。&lt;br /&gt;&lt;br /&gt;インストール直後の設定は以下のとおり。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;一度ログアウトする&lt;/li&gt;&lt;li&gt;「アプリケーション」＞「その他」＞「入力メソッドのセレクター」を選択（※1）&lt;/li&gt;&lt;li&gt;「IBusを使用する（推奨）」を選択&lt;/li&gt;&lt;li&gt;「入力メソッドの個人設定」ボタンをクリック&lt;/li&gt;&lt;li&gt;「インプットメソッド」タブの「インプットメソッドの選択」プルダウンで「日本語」＞「mozc」を選択して「追加」をクリックし、「上へ」ボタンで一番上に持ってくる（※2）&lt;/li&gt;&lt;li&gt;「閉じる」ボタンですべてを閉じる&lt;/li&gt;&lt;/ol&gt;少々ややこしい。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-R-PrnyduoVk/ThMcyroQqSI/AAAAAAAACsg/p7nzNgoewog/s1600/mozc01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-R-PrnyduoVk/ThMcyroQqSI/AAAAAAAACsg/p7nzNgoewog/s320/mozc01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;しかし見よ、しっかりとジャイアンがカタカナで変換されるこの精度を！！&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cK7Ki-p6BPY/ThMc2nhbTPI/AAAAAAAACsk/Ypchjuf6-DY/s1600/mozc02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-cK7Ki-p6BPY/ThMc2nhbTPI/AAAAAAAACsk/Ypchjuf6-DY/s320/mozc02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;※1：GNOME3の機能をフルに使っている場合、このメニューは表示されないので、「アクティビティ」＞「アプリケーション」＞「その他」＞「入力メソッドのセレクター」で起動する&lt;br /&gt;※2：インストール直後に一度ログアウトておかないとここで「mozc」が表示されない&lt;br /&gt;&lt;br /&gt;さて、個人的にはMS-IMEでは、&lt;br /&gt;&lt;blockquote&gt;日本語入力状態でアルファベット（URLなど）を入力してしまったら、F10キーですべてを半角アルファベットとして変換&lt;/blockquote&gt;という技を多用している。&lt;br /&gt;&lt;br /&gt;しかしこのibusではこの機能が有効になっていない。GNOMEの設定でF10は別の機能に割り当てられてしまっている。&lt;br /&gt;&lt;br /&gt;これを簡単に変更するには、「設定エディタ」というアプリを入れれば良い。&lt;br /&gt;&lt;br /&gt;yumexで「gconf-editor」を検索し、インストールする。&lt;br /&gt;インストール後は「アプリケーション」＞「システムツール」＞「設定エディタ」で起動する。&lt;br /&gt;&lt;br /&gt;起動した後の設定は以下のとおり。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;「desktop」＞「gnome」＞「interface」＞「menubar_accel」をダブルクリック&lt;/li&gt;&lt;li&gt;「F10」と書いてあるところを「&amp;lt;ctrl&amp;gt;F10」に編集&lt;/li&gt;&lt;/ol&gt;でOKだ。これでGNOMEのF10はCtrl＋F10を押さないと機能しなくなると同時に、GNOMEがF10を手放すので、ibus側でF10が有効になる、という仕組みだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-X10yHaQmR3w/ThMhbLf0BlI/AAAAAAAACss/RL0Fmb6ZN4g/s1600/gconf-editor91.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-X10yHaQmR3w/ThMhbLf0BlI/AAAAAAAACss/RL0Fmb6ZN4g/s320/gconf-editor91.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;2011.07.10追記&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Windowsなキーボードでは左上の「半角/全角」キーでIMEの切り替えをしている場合がほとんどだと思うけど、このibusが「半角/全角」ではなく「Ctrl」＋「Space」で切り替えてしまうという設定になっている場合があるのを発見した。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;VMware＋Fedora15&lt;/li&gt;&lt;li&gt;とあるデスクトップPC＋Fedora15&lt;/li&gt;&lt;li&gt;とあるノートPC＋Fedora15&lt;/li&gt;&lt;/ul&gt;を試したところ、ノートPCのFedoraでこの現象が起きた。&lt;br /&gt;早速色々調査してみたところ、無事に「半角/全角」で日本語切り替えができるようになったので、その方法を書いておく。&lt;br /&gt;&lt;br /&gt;まず画面上に表示されたキーボードのアイコンを右クリックし、表示されたメニューから「設定」を選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nEtZEyggVgQ/ThkUiiQ7ZiI/AAAAAAAACwQ/zpnc1TJP0u4/s1600/ibus01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-nEtZEyggVgQ/ThkUiiQ7ZiI/AAAAAAAACwQ/zpnc1TJP0u4/s320/ibus01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「IBusの設定」ウィンドウが表示されるので、「一般」タブにある「切り替え」右側の「...」ボタンをクリックすると「トリガーのキーボードショートカットを選択」ダイアログが表示されるので、ここで設定されているキーボードショートカットを全部削除する（別に削除しなくてもよいが、分かりやすいようにまずは全部削除しておいたほうが良い）。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jBUdxXDhip4/ThkVBfDk2nI/AAAAAAAACwU/0WwJNbU5PZI/s1600/ibus02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-jBUdxXDhip4/ThkVBfDk2nI/AAAAAAAACwU/0WwJNbU5PZI/s320/ibus02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次が重要。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;「トリガーのキーボードショートカット」ダイアログ内の「キーコード」右にある「...」ボタンをクリック&lt;/li&gt;&lt;li&gt;「全角/半角」キーを1度だけ押す（キーコードに「Zenkaku_Hankaku」と表示される）&lt;/li&gt;&lt;li&gt;&lt;b&gt;「モデファイア」内のチェックボックスから&lt;span class="Apple-style-span" style="color: red;"&gt;すべてのチェックを外す&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;「追加」ボタンをクリック（「Zenkaku_Hankaku」がキーボードショートカットに追加される）&lt;/li&gt;&lt;li&gt;「OK」ボタンで「トリガーのキーボードショートカット」を閉じる&lt;/li&gt;&lt;li&gt;「IBusの設定」ウィンドウに戻るので「閉じる」ボタンで閉じる&lt;/li&gt;&lt;/ol&gt;これで、「半角/全角」キーで日本語入力の切り替えができるようになったはずだ。&lt;br /&gt;モデファイアのチェックがついてしまっていると、「半角/全角」キーと何かのキーを組み合わせないといけなくなるので注意。特に初回、「Release」にチェックが付いてしまうので、これは外しておかないといけない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FQL5kFN4Vo4/ThkV5YMeZPI/AAAAAAAACwc/h-NCzxDt3Lw/s1600/ibus03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-FQL5kFN4Vo4/ThkV5YMeZPI/AAAAAAAACwc/h-NCzxDt3Lw/s320/ibus03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;2011.07.11追記&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;テキストエディタなどではちゃんと切り替えができるが、例えばブログの入力画面、特にWYSIWYGエディタの場合、認識しないことがある。というより認識しない。&lt;br /&gt;&lt;br /&gt;ただしinput[type="text"]やtextareaなら切り替えが認識されるので、日本語入力切換時に入力可能なフィールドが決め打ちされている気がする。&lt;br /&gt;&lt;br /&gt;そもそもエディタにフォーカスがあたってなくても、切り替えボタンを押したら切り替えて欲しいと思うのだが、なんでわざわざこういう制限が付いているのかわからん。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【vim-X11】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、俺はあまり使わないのだが、vim-X11という便利なアプリがあるらしい。&lt;br /&gt;早速入れてみようじゃないか。&lt;br /&gt;&lt;br /&gt;例によってyumexで「vim-x11」を検索し、そのまま適用してインストールだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5BmjKPbDpzA/ThMiDJqzuJI/AAAAAAAACsw/xbIOUbqRGZg/s1600/vim-x11.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-5BmjKPbDpzA/ThMiDJqzuJI/AAAAAAAACsw/xbIOUbqRGZg/s320/vim-x11.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「アプリケーション」＞「アクセサリ」＞「Vi IMproved」で起動できる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【p7z / unrar】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次は何かと便利なアーカイブ＋コンプレス系を入れておこう。&lt;br /&gt;（ちなみにアーカイブというのは複数ファイルをくっつける事で、コンプレスが圧縮するという意味。アーカイバ＝圧縮ソフトではないので注意。tarでくっつけてgzで圧縮したものが、tar.gzだ。）&lt;br /&gt;&lt;br /&gt;p7zもrarもyumexでサクっとインストール可能。&lt;br /&gt;&lt;br /&gt;「p7z」で検索してチェックし、「unrar」で検索してチェック後「適用」ボタンでインストール。&lt;br /&gt;インストール後は圧縮に7z形式、解凍に7z形式とrar形式が加わる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RgMx-aIyW60/ThMjfUuVmLI/AAAAAAAACs4/zMWs2n8lehs/s1600/p7z.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-RgMx-aIyW60/ThMjfUuVmLI/AAAAAAAACs4/zMWs2n8lehs/s320/p7z.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Dropbox】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Dropboxとはなんぞや？と聞かれれば、&lt;br /&gt;&lt;blockquote&gt;誰かが管理してるサーバに好きなファイルをおけるから、職場でも自宅でも好きな場所からファイルにアクセス出来るし、しかも内部で版管理されているので、昨日の編集状態にもどしたり、一度消したファイルも復活させることが可能なのに、誰でも無料で使えるんだ。そして容量がたりなくなったら有料プランでガッツり保管場所を増設できる。&amp;nbsp;&lt;/blockquote&gt;と答えるだろう。&lt;br /&gt;さらにこれを一言でいうと、「クラウド」だ。&lt;br /&gt;いつでもどこでも好きなときに好きなだけ引き出せる銀行の金庫のようなもの。&lt;br /&gt;&lt;br /&gt;というわけで、早速Dropboxを使ってみようじゃないか。&lt;br /&gt;予めDropboxのサイトでユーザ登録は済ませておくこと。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dropbox.com/"&gt;http://www.dropbox.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tD-88CbZeB0/ThMk2x1yNDI/AAAAAAAACtA/LY2BwydW2Hk/s1600/dropbox01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-tD-88CbZeB0/ThMk2x1yNDI/AAAAAAAACtA/LY2BwydW2Hk/s320/dropbox01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このサイトの「Dropboxのダウンロード」をクリックし、インストーラをダウンロードする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LHybzTh9Was/ThMk6q4NAFI/AAAAAAAACtE/iSMJQ79o27s/s1600/dropbox02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-LHybzTh9Was/ThMk6q4NAFI/AAAAAAAACtE/iSMJQ79o27s/s320/dropbox02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Fedoraパッケージで適切なものをクリックし、rpmファイルをダウンロードする。&lt;br /&gt;ダウンロードが終わったら、コンソールでrootとしてインストールする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# rpm -ivh nautilus-dropbox-0.6.8-1.fedora.i386.rpm&lt;br /&gt;&lt;/pre&gt;最終的に以下のメッセージが表示されれば完了。&lt;br /&gt;&lt;pre class="html" name="code"&gt;Dropbox installation successfully completed! You can start Dropbox from your applications menu.&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;これで完了だ。「アプリケーション」＞「インターネット」＞「Dropbox」を選択して起動してみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dnmQ82fwnl8/ThMm21WaWiI/AAAAAAAACtM/1tCt2yMqtR0/s1600/dropbox03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-dnmQ82fwnl8/ThMm21WaWiI/AAAAAAAACtM/1tCt2yMqtR0/s320/dropbox03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Don't show this again」にチェックを入れ、「OK」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vAZlYHptreE/ThMnKJbPqLI/AAAAAAAACtQ/ds_5riv-NlQ/s1600/dropbox04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-vAZlYHptreE/ThMnKJbPqLI/AAAAAAAACtQ/ds_5riv-NlQ/s320/dropbox04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;なんとこれからインストールが始まるのではないか！少々クリビツ＆テンギョーな感じだが、まぁ良いだろう。じっと待つことにする（しかし、インストールにずいぶん時間がかかるのはVMwareだからなのか。別のFedoraでは数秒で終わったんだが・・・）。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QyJqHmMf7Js/ThMorHMYHOI/AAAAAAAACtY/7YQH6aneGVA/s1600/dropbox05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-QyJqHmMf7Js/ThMorHMYHOI/AAAAAAAACtY/7YQH6aneGVA/s320/dropbox05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;無事にインストールが終わると直ぐにセットアップが開始される。&lt;br /&gt;すでにDropboxへの登録が済んでいるはずなので、「すでに Dropbox アカウントを持っています」をチェックし、「次へ」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;もしまだ持ってなかったら、画面はこのままにして、Chromeを起動し、Dropboxへ登録していただきたい。登録に使用するメールアドレスはGmailなどの、ブラウザで確認ができるメールアドレスが好ましい（だってまだこのマシンにメーラいれてないでしょ！）。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZNWltbtvaFo/ThMqvbVehLI/AAAAAAAACtg/4VZAgtnnaes/s1600/dropbox06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-ZNWltbtvaFo/ThMqvbVehLI/AAAAAAAACtg/4VZAgtnnaes/s320/dropbox06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;メールアドレスとパスワードを入力し、「次へ」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6m_N6B1BDe0/ThMq2XiM_RI/AAAAAAAACtk/RkZS0LPBgxY/s1600/dropbox07.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-6m_N6B1BDe0/ThMq2XiM_RI/AAAAAAAACtk/RkZS0LPBgxY/s320/dropbox07.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;無料の「2GB」を選択し、「次へ」ボタンで次へ進む。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-smLnbGbx9yE/ThMq_-WpuEI/AAAAAAAACto/iZW19UdzBZg/s1600/dropbox08.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-smLnbGbx9yE/ThMq_-WpuEI/AAAAAAAACto/iZW19UdzBZg/s320/dropbox08.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「セットアップタイプ」は「標準」をチェックし、「インストール」ボタンでインストールする。&lt;br /&gt;このインストールボタンをクリックした後、5ページの説明が表示されるので、内容を確認しながら「次へ」ボタンで進んでいく。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-np7zhyjHIME/ThMrRdFOhKI/AAAAAAAACts/wqmT8wJL-c8/s1600/dropbox09.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-np7zhyjHIME/ThMrRdFOhKI/AAAAAAAACts/wqmT8wJL-c8/s320/dropbox09.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この画面が5ページ目。右下の「完了」ボタンをクリックする。&lt;br /&gt;&lt;blockquote&gt;ここでなにかパスワードを入力するダイアログが表示されるのだが、なんのパスワードを入れるのかが不明。このマシンのこのユーザのパスワードを入れても、rootのパスワードを入れても弾かれる。そして「手動で設定してください」と言われて終了。これは後日調べる予定。&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-D-RrImY6WfU/ThMroeP4WqI/AAAAAAAACtw/gSyNR-Iupuc/s1600/dropbox10.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-D-RrImY6WfU/ThMroeP4WqI/AAAAAAAACtw/gSyNR-Iupuc/s320/dropbox10.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;そして無事にDropboxがひらいてくれた。デフォルトだとユーザのホームフォルダ内に「Dropbox」という名前でフォルダが作られ、その中身が同期対象となる。&lt;br /&gt;&lt;br /&gt;あくまでフォルダはローカルに存在するものなので、ファイルの移動などをすれば当然しっかり移動になる。コピーではないので要注意だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■メディア系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ここでは主に音楽や動画再生環境などを紹介していきたい。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Rhythmbox&lt;/th&gt;&lt;td&gt;GNOMEデフォルトの音楽再生プレイヤ。そつない感じ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Exaile&lt;/th&gt;&lt;td&gt;プレイリストを複数作っていくタイプの音楽再生プレイヤ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;EasyTAG&lt;/th&gt;&lt;td&gt;mp3に含まれるID3タグを編集する。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;RealPlayer&lt;/th&gt;&lt;td&gt;余り起動することはないかもしれないがrmファイルはこれで再生。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;VLC&lt;/th&gt;&lt;td&gt;様々なメディアに対応しているプレイヤ。DVD観るならこれが楽。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;K9Copy&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;2011.07.29追記&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;&lt;td&gt;DVDをiso化。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Rhythmbox】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;RhythmboxはGNOMEデフォルトの音楽再生ソフトだ。&lt;br /&gt;使用方法はそれほど難しいわけではないので割愛するが、ちょっとした設定なら前回の記事を参考にしてほしい。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/06/windows46_08.html"&gt;http://torhamzedd.blogspot.com/2011/06/windows46_08.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Exaile】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Exaileと書いてエグザイルではなく、エクサール、もしくはエクセールと読む。&lt;br /&gt;Yumexで「exaile」で検索し、インストールする。&lt;br /&gt;&lt;br /&gt;インストール後、「アプリケーション」＞「サウンドとビデオ」＞「Exaile Music Player」で起動可能。&lt;br /&gt;&lt;br /&gt;使い方の例としては以下のようにすると簡単。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;「編集」＞「Colleciton」＞「コレクションマネージャ」で「追加」ボタンをクリック&lt;/li&gt;&lt;li&gt;再生したいファイルがある親フォルダを開いた状態で「追加」ボタンをクリック&lt;/li&gt;&lt;li&gt;「コレクションマネージャ」の「適用」ボタンをクリック&lt;/li&gt;&lt;li&gt;左側ペインに選択肢たフォルダ内が取り込まれる&lt;/li&gt;&lt;li&gt;適宜再生したいアーティスト内を右側にドラッグ（もしくはアルバム単位でも良い）してプレイリストへ追加する&lt;/li&gt;&lt;/ol&gt;これであとは再生ボタンで再生するだけだ。&lt;br /&gt;&lt;blockquote&gt;ちなみにこれらの音楽再生ソフトで共通した、非常に迷惑な機能がある。それは、HDDから音楽ファイルを削除する機能だ。これは何のためにある機能なのかさっぱり理解出来ない。プレイリストを消そうとしてHDDから消してしまったら大変じゃないかと思うんだが、何故か多くの音楽再生ソフトによくある機能として実装されている。不思議でたまらない。&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-S7-hSC4EFk4/ThRdxdyTVmI/AAAAAAAACt4/XgskvV-kwmY/s1600/exaile01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-S7-hSC4EFk4/ThRdxdyTVmI/AAAAAAAACt4/XgskvV-kwmY/s320/exaile01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;機能などはRhythmboxとそう大差はない（iTunesほど痒いところに手が届く音楽再生ソフトを探しているならLinuxではなくMacかWIndowsを使えば良い。つまりiTunesに勝ってるソフトはLinuxには存在しないと認識して良い）。&lt;br /&gt;&lt;br /&gt;Rhytmboxがクラッシュしまくったり、どうしても使い勝手が気に入らなければ、このExaileを使うとよいだろう。動作は比較的安定しているようだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【EasyTAG】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;EasyTAGは、mp3ファイルのID3タグを簡単操作で一括処理などできる便利ソフトだ。&lt;br /&gt;こちらもRhythmbox同様、前回の記事を見ていただければ使い方は理解できるとおもう。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torhamzedd.blogspot.com/2011/06/windows46_08.html"&gt;http://torhamzedd.blogspot.com/2011/06/windows46_08.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【RealPlayer】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;10年ほど前は一世風靡していたと言っても過言ではない音楽再生プレイヤだ。多くの動画再生サイトでは、Windows Media Player形式かRealPlayer形式に対応していた。AppleのQuicktime形式は徐々に使われなくなっていたという時代だ。&lt;br /&gt;&lt;br /&gt;しかし徐々にWindows Media（wmp形式）かQuickTime（mov形式）かの二極化が進み、RealPlayerのrm形式はほとんど陽の目を浴びなくなってしまった。&lt;br /&gt;&lt;br /&gt;それから長い年月を経て（10年くらい？）YouTubeなどのサイトで動画をダウンロード出来る機能が追加されたりして、今では復活の兆しをみせている。&lt;br /&gt;&lt;br /&gt;残念ながらLinux版RealPlayerはWindows版などのように高機能ではないが、rm形式のファイルはRealPlayerなどの一部のソフトでしか再生できないので、もし気になる人が入れば、インストールしておいても損はないと思う。&lt;br /&gt;&lt;br /&gt;というわけで、以下のサイトからrpmをダウンロードし、ダブルクリックしてインストールしよう。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://director.real.com/realplayer?type=rp11_linux&amp;amp;rppr=rpm"&gt;http://director.real.com/realplayer?type=rp11_linux&amp;amp;rppr=rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;アクセスするととたんにダウンロードが始まり、「RealPlayer11GOLD.rpm」という、なんだか懐かしい名前のファイルがダウンロード可能だ。&lt;br /&gt;&lt;br /&gt;インストール中、「追加の検証が必要です」とダイアログが表示され、sudoと同じく今ログインしているアカウントのパスワードの入力が求められる。rootのパスワードではないので注意。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-81dfgsmmx1w/ThRf8kcGi9I/AAAAAAAACuA/hVZ_QtDtWj8/s1600/realplayer01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-81dfgsmmx1w/ThRf8kcGi9I/AAAAAAAACuA/hVZ_QtDtWj8/s320/realplayer01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールが終わると、「アプリケーション」＞「サウンドとビデオ」＞「RealPlayer 11」で起動できる。&lt;br /&gt;&lt;br /&gt;初回起動では「セットアップ アシスタント」というセットアップツールが起動する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ouk2mInxcUM/ThRg2nuOv6I/AAAAAAAACuI/MX7AMRpsGcg/s1600/realplayer02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-ouk2mInxcUM/ThRg2nuOv6I/AAAAAAAACuI/MX7AMRpsGcg/s320/realplayer02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;基本的には「次へ」ボタンで進んでいけば良い。&lt;br /&gt;&lt;br /&gt;途中で「ほぼ完了しました」と、およそRealPlayerとは思えない優しい説明が表示される（当時のRealPlayerの有償版への誘導は、南米人の顔よりしつこく、中国人の嫁くらい強烈だった）。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mCICK1pSOAI/ThRhfVNbwAI/AAAAAAAACuM/avkMrH0kZfA/s1600/realplayer03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-mCICK1pSOAI/ThRhfVNbwAI/AAAAAAAACuM/avkMrH0kZfA/s320/realplayer03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;セットアップ アシスタントが終わると起動する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Sjdp-Twwm_4/ThRhxkduxgI/AAAAAAAACuQ/fqmcbM7mPlE/s1600/realplayer04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-Sjdp-Twwm_4/ThRhxkduxgI/AAAAAAAACuQ/fqmcbM7mPlE/s320/realplayer04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;FireFoxのプラグインが同時にインストールされるが、これが何をしてくれるのかはよくわからない。&lt;br /&gt;Windows版のように、たとえばYouTubeの動画の上にツールバーが表示され、自由に動画をダウロードできるわけでもない。&lt;br /&gt;&lt;br /&gt;正直よくわからんのだが、なにかできるのかも知れないから探してみるのも良いかも知れない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-plgx9Z3F970/ThRid8IFxVI/AAAAAAAACuU/w3rd-WIhS4g/s1600/realplayer05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-plgx9Z3F970/ThRid8IFxVI/AAAAAAAACuU/w3rd-WIhS4g/s320/realplayer05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【VLC】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、そこそこのスペックのPCにFedora15をインストールしてるのであれば、CR-ROMではなくDVD-ROMトレイが付いていたりするかも知れない。&lt;br /&gt;&lt;br /&gt;そうなるとやはり、DVDの再生を試してみたくなるのではないか。&lt;br /&gt;しかしこの段階でDVDを再生できる環境がない。&lt;br /&gt;&lt;br /&gt;だが俺達にはVLCがある。VLCをインストールするだけで、DVDを再生することができるんだ。&lt;br /&gt;早速yumexから「vlc」で検索し、インストールしようじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Rb5mTPskha4/ThRjLhPXwyI/AAAAAAAACuY/JaiR04wY5Qg/s1600/vlc01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-Rb5mTPskha4/ThRjLhPXwyI/AAAAAAAACuY/JaiR04wY5Qg/s320/vlc01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールされるパッケージがいくつもあるので少々時間がかかるかもしれないが、今のうちにトイレにでもいってくると良い。&lt;br /&gt;&lt;br /&gt;そしてインストールが終わると「アプリケーション」＞「サウンドとビデオ」＞「VLCメディアプレイヤー」で起動できる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Aq0HKeNQ5jY/ThRj_89mVzI/AAAAAAAACuc/x3VusVHQpPg/s1600/vlc02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-Aq0HKeNQ5jY/ThRj_89mVzI/AAAAAAAACuc/x3VusVHQpPg/s320/vlc02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;初回起動では「プライバシーとネットワークポリシー」が表示されるので、一通り読んだら「OK」ボタンで閉じよう。&lt;br /&gt;&lt;br /&gt;あなたが愛してやまないDVDをDVDトレイに挿入し、VLCの「メディア」＞「ディスクを開く」で「メディアを開く」ウィンドウを表示させ、「再生」ボタンで再生することができる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jv-Hqu-3dcM/ThRnQRPYdOI/AAAAAAAACuk/cQd_jfHewRA/s1600/vlc_play.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" src="http://2.bp.blogspot.com/-jv-Hqu-3dcM/ThRnQRPYdOI/AAAAAAAACuk/cQd_jfHewRA/s320/vlc_play.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;※動画キャプチャ出来なかったためデジカメで撮影&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;2011.07.20追記&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;ちなみにisoファイルはダブルクリックすると自動的にマウントしてくれるので、マウントした後にVLCで読み込むことが可能になる。&lt;br /&gt;&lt;strike&gt;VLCから直接isoを開こうとしても開いてくれないので注意。&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;&lt;b&gt;VLCから直接iso開けた。すまん。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;2011.07.29追記&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;【K9Copy】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;K9CopyはLinuxで数少ないDVDコピーができるアプリだ。個々で注意してほしいのが、DVDのコピー自体は違法ではないということ。&lt;br /&gt;あなたが愛して止まない映画のDVDを購入したとする。そのDVDを自分でコピーし、それを使用して映画を見たところで、犯罪ではない。&lt;br /&gt;&lt;br /&gt;もしコピーしたDVDメディア、isoなどを他人に貸したり売ったりしたら犯罪になる。&lt;br /&gt;&lt;br /&gt;DVDコピー自体は違法ではないので、DVDコピーツールに悪意のまなざしを向けてはいけないということだ。&lt;br /&gt;&lt;br /&gt;ここら辺ご理解いただければ、早速DVDコピーアプリをインストールして見よう。&lt;br /&gt;Yumexで「k9copy」で検索して、インストールする。&lt;br /&gt;※表示されなかったらRPMFusionのリポジトリがON担っているか確認！&lt;br /&gt;&lt;br /&gt;「アプリケーション」＞「サウンドとビデオ」＞「k9copy」で起動。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qWh5X_ArqYw/TjJbghipNXI/AAAAAAAADCc/dYE2ZMszVbI/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://2.bp.blogspot.com/-qWh5X_ArqYw/TjJbghipNXI/AAAAAAAADCc/dYE2ZMszVbI/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;DVDを入れてない状態なのでそっけないが、元DVDと出力先（DVDとしてコピーなのか、ISOファイルを作るのか、フォルダにコピーするのかなど）を指定して「コピー」ボタンを押せば、すぐにコピーが始まる。&lt;br /&gt;&lt;br /&gt;ちなみにK9Copyにはウィザードモードもあり、これは別ソフト扱いなのだが、「k9copy assistant」を起動してみると分かる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZocxaUnmN4w/TjJbkFgyQWI/AAAAAAAADCg/6B4qQXaad3E/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://1.bp.blogspot.com/-ZocxaUnmN4w/TjJbkFgyQWI/AAAAAAAADCg/6B4qQXaad3E/s320/Screenshot-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ウィザードモードなので、書いてある内容をよく読めば、誰でも使い方が分かると思う。&lt;br /&gt;しかしこのk9copy、実はDVDをisoに使用として、一度も成功した試しがない。&lt;br /&gt;途中で音もなく終了してしまうのだ。かなり不安定なソフトであることが分かる。&lt;br /&gt;&lt;br /&gt;しかし今のところLinuxでDVDをiso化するソフトはこれくらいしか知らない。&lt;br /&gt;もしかしたら有償ソフトですごいものがあるのかもしれないが、無償アプリを紹介するための記事なので、詳しい調査はしないこととするのであしからず。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■グラフィック系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;画像を編集したり、イラストを書いたりできるソフトだ。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;GIMP&lt;/th&gt;&lt;td&gt;Linux版Photoshop的な存在。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;InkScape&lt;/th&gt;&lt;td&gt;Linux版Illustratorとも言うべき存在。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Blender&lt;/th&gt;&lt;td&gt;3Dモデラ。機能がはんぱ無い。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【GIMP】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;GIMP（ギンプ）は10年以上前から長い期間を経て多機能/高機能してきた、歴史のあるソフトだ。&lt;br /&gt;何が出来るのかというと、画像生成、編集だ。&lt;br /&gt;&lt;br /&gt;Fedora15にはバージョン2.6がデフォルトでインストールされているので、インストール方法は割愛するが、入れなおしたりする場合はYumexで「gimp」と検索すればいいだろう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PnbunP_BUuc/Thkg3f1DS6I/AAAAAAAACwk/zPXfiW9Njs0/s1600/gimp.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-PnbunP_BUuc/Thkg3f1DS6I/AAAAAAAACwk/zPXfiW9Njs0/s320/gimp.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;さすがに歴史が長いソフトなので、使い方などはググれば直ぐに出てくるし、書籍も沢山存在する。&lt;br /&gt;&lt;br /&gt;&lt;script charset="utf-8" src="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=JP&amp;amp;ID=V20070822/JP/ogaiii-22/8001/a9e2eb3f-df39-43ec-b171-b06d10fc63e3" type="text/javascript"&gt; &lt;/script&gt; &lt;noscript&gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a HREF="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;MarketPlace=JP&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;ID=V20070822%2FJP%2Fogaiii-22%2F8001%2Fa9e2eb3f-df39-43ec-b171-b06d10fc63e3&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;Operation=NoScript"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Amazon.co.jp ウィジェット&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/A&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&lt;/noscript&gt;&lt;br /&gt;俺はPhotoshopを使うのをやめてGIMPに移行した。Photoshopでしか出来ないことは、意外に業務では要求されない。それにGIMPは無償だし、Windows、Macでも使えるから、なければその場で入れれば良い。そう考えるとすごく便利だ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【InkScape】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;InkScapeは、いうなればベクターグラフィックソフトだ。乱暴な言い方をすれば、Adobe Illustratorのようなソフトという紹介がよくされている。&lt;br /&gt;&lt;br /&gt;インクスペースでもインクスペックでもなく、インクスケープなので注意。ネットスケープのネットをインクに変えれて発音すれば良い。&lt;br /&gt;&lt;br /&gt;インストールするにはYumexで「inkscape」を検索すればOK。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9fotz-dS2GI/ThkprxOV1OI/AAAAAAAACws/RsMPK60tfKE/s1600/inkscape.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-9fotz-dS2GI/ThkprxOV1OI/AAAAAAAACws/RsMPK60tfKE/s320/inkscape.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;具体的な使い方は割愛するが、Photoshop対GIMPより、Illustrator対InkScapeの方がインタフェースが違いすぎているので、全く新しいソフトを覚える覚悟が必要だ。&lt;br /&gt;&lt;br /&gt;&lt;script charset="utf-8" src="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=JP&amp;amp;ID=V20070822/JP/ogaiii-22/8001/04152015-60fc-41cf-876f-87257926280c" type="text/javascript"&gt; &lt;/script&gt; &lt;noscript&gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a HREF="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;MarketPlace=JP&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;ID=V20070822%2FJP%2Fogaiii-22%2F8001%2F04152015-60fc-41cf-876f-87257926280c&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;Operation=NoScript"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Amazon.co.jp ウィジェット&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/A&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&lt;/noscript&gt;&lt;br /&gt;結論を言うと、Adobeの存在を脳から消し、PhotohsopとIllustratorの知識をとっとと忘れれば良い（それくらい気合を入れればなんでもできる）。&lt;br /&gt;&lt;br /&gt;俺はIllustratorを使うのをやめてInkScapeに移行した。Illustratorでしか出来ないことは、意外に業務では要求されない。それにInkScapeは無償だし、Windows、Macでも使えるから、なければその場で入れれば良い。そう考えるとすごく便利だ。&lt;br /&gt;&lt;br /&gt;※基本的なモデル図などは予めIncScapeで作成したシェイプをLibreOfficeのDrawで使ったほうが遥かに便利&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Blender】&lt;/b&gt;（YafRay、LuxRender）&lt;br /&gt;&lt;br /&gt;Blender（ブレンダー）は今や無償の3Dモデラとしては不動の地位を占めているソフトだ。&lt;br /&gt;ただその奇怪な登場の仕方も相まって、非常に好みが分かれるソフトでもある。&lt;br /&gt;&lt;br /&gt;Blenderでどういうグラフィックが作れるのかは、海外のギャラリーを見れば直ぐにわかる（国内のギャラリーだと萌えアニメ系が多い）。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://goo.gl/uHW7f"&gt;http://goo.gl/uHW7f&lt;/a&gt;&lt;br /&gt;&lt;a href="http://goo.gl/hccGG"&gt;http://goo.gl/hccGG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最新バージョンの2.5ではかなりの使い勝手の向上が図られており、もしこれから3Dグラフィックを始めるのであれば、出来れば2.5からの方が良いだろう。&lt;br /&gt;&lt;br /&gt;ただFedora15のリポジトリからは、2.4をダウンロードすることになる。&lt;br /&gt;こちらもYumexから「blender」を検索してインストールしよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Rnzm47QcNA0/ThnHjcvYYFI/AAAAAAAACx0/mZsu1J7hihU/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://2.bp.blogspot.com/-Rnzm47QcNA0/ThnHjcvYYFI/AAAAAAAACx0/mZsu1J7hihU/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;「&lt;a href="http://goo.gl/4PRPu"&gt;びおめた&lt;/a&gt;」さんとこから&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;「二階堂令子」をお借りして表示してみた&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;（使用許可済み）&lt;/div&gt;&lt;br /&gt;Blenderは単体でのレンダリングもアニメーションも可能な統合3DCGソフトだが、あらかじめいくつかレンダラを入れておくのがよい。&lt;br /&gt;&lt;br /&gt;というわけで、以下のパッケージもblenderと一緒に入れておくとよいと思われる。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yafaray-blender&lt;/li&gt;&lt;li&gt;LuxRender-blender&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-viEzXsT-Gg0/ThlCXbXB2FI/AAAAAAAACxU/ZuhjoqUqvNU/s1600/blender01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-viEzXsT-Gg0/ThlCXbXB2FI/AAAAAAAACxU/ZuhjoqUqvNU/s320/blender01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ちなみにレンダリング結果はGoogleで画像検索すると大体俯瞰できる。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Yafaray&amp;nbsp;&lt;/b&gt;&lt;a href="http://goo.gl/ouNhJ"&gt;http://goo.gl/ouNhJ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;LuxRender&amp;nbsp;&lt;/b&gt;&lt;a href="http://goo.gl/6YFcl"&gt;http://goo.gl/6YFcl&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;2.5はリリースされたばかりだが、ちゃんと書籍も（現状では1冊だけ）出版されている。その他は2.4以前の物だが、まだまだ2.5はそれほど一気に普及しているわけではないので、2.4で一通り機能を覚え、2.5でその差分を覚えれば、2.4の書籍を購入しても2.5にも当然役立つだろう。&lt;br /&gt;&lt;br /&gt;&lt;script charset="utf-8" src="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=JP&amp;amp;ID=V20070822/JP/ogaiii-22/8001/a8dbe01e-697d-470d-8355-78741efbf1bb" type="text/javascript"&gt; &lt;/script&gt; &lt;noscript&gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;A HREF="http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;MarketPlace=JP&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;ID=V20070822%2FJP%2Fogaiii-22%2F8001%2Fa8dbe01e-697d-470d-8355-78741efbf1bb&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;Operation=NoScript"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Amazon.co.jp ウィジェット&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/A&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&lt;/noscript&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■サウンド系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次にサウンド、つまり音声系音楽系を紹介する。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Audacity&lt;/th&gt;&lt;td&gt;音楽ファイル編集ソフト。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Rosegarden&lt;/th&gt;&lt;td&gt;シーケンサ。作曲したい人はこちら。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Audacity】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Audacity（オーダシティ）は既存音声ファイルの編集に長けた使い勝手のよいサウンドエディタだ。&lt;br /&gt;ちなみに辞書によると、Audacityとは「厚顔無恥」「傍若無人」という意味らしい。&lt;br /&gt;&lt;br /&gt;こちらもYumexでインストールするのだが、注意がある。&lt;br /&gt;普通に「audacity」をいれてしまうより、「audacity-freeworld」を入れれば、mp3などのエンコードも一緒に入ってくれるので、出来ればこちらを選択しよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wsZb4FFjA1M/ThkxRWs-EnI/AAAAAAAACw0/ozr9KnipzTU/s1600/audacity01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-wsZb4FFjA1M/ThkxRWs-EnI/AAAAAAAACw0/ozr9KnipzTU/s320/audacity01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Audacityの基本的な使用目的だが、例えば音声ファイルの前後を切り詰めたり、wmvをmp3に変換したりなどが直感的にできる優れものだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2xcNAT-rzms/Thkx5H2xlZI/AAAAAAAACw4/JqgjqQXrx1g/s1600/audacity02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-2xcNAT-rzms/Thkx5H2xlZI/AAAAAAAACw4/JqgjqQXrx1g/s320/audacity02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【Rosegarden】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Rosegarden（ローズガーデン）はシーケンサだ。つまり作曲することができる。&lt;br /&gt;こちらもYumexで「rosegarden」を検索して、そのままインストールが可能。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eORYinv8MQg/Thkz_8rXEWI/AAAAAAAACxA/HvXpNUVt4XI/s1600/rosegarden.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-eORYinv8MQg/Thkz_8rXEWI/AAAAAAAACxA/HvXpNUVt4XI/s320/rosegarden.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;WILLCOMなどの携帯では着メロにmidiファイルを使用できるが、版権もののmidiは通常ダウンロードすることが出来ない（大抵がJASRACとかいう脳みそが腐った天下り思想且つ隠蔽体質で搾取大好きの無能集団の罠）。&lt;br /&gt;&lt;br /&gt;そういう場合は気合と根性でオリジナルを耳コピし、Rosegardenで音符を起こそう。そして自分だけが使えば問題ない。気合が無いなら最初からやらなければ良い。&lt;br /&gt;&lt;br /&gt;使用する際は消費メモリに気をつけよう。&lt;br /&gt;結構メモリを喰いまくるので、非力なマシンでの使用はおすすめしない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ビデオ系&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Kino&lt;/th&gt;&lt;td&gt;動画編集ソフト。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;RecordMyDesktop&lt;/th&gt;&lt;td&gt;動画キャプチャソフト。綺麗に録画してくれる。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;【Kino】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Kino（キノ）はいうなれば、Windows XPからプリインストールされている、ムービーメーカーのようなものだ。撮影した動画、かっぱらってきた動画などをあなたのお好みに合わせて好きに編集することができる。&lt;br /&gt;&lt;br /&gt;こちらもYumexで「kino」で検索してインストールすることが可能だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-r--ivjjW6ts/ThlAidTpNgI/AAAAAAAACxI/pZxad-wuRk8/s1600/kino01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-r--ivjjW6ts/ThlAidTpNgI/AAAAAAAACxI/pZxad-wuRk8/s320/kino01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1W2yRWjA70I/ThlAmCw9WpI/AAAAAAAACxM/CoeKLKmvwFI/s1600/kino02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-1W2yRWjA70I/ThlAmCw9WpI/AAAAAAAACxM/CoeKLKmvwFI/s320/kino02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;※キャプチャ出来なかったのでこの画像は合成&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;【RecordMyDesktop】&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;GNOMEには[Crtl]+[Shift]+[Alt]+[R]でデスクトップ全体を動画キャプチャしてくれる機能が最初から搭載されてはいるが、いかんせんデスクトップ全体だ。&lt;br /&gt;&lt;br /&gt;指定したウィンドウの動画、音声をキャプチャしてくれるソフトが必要ではないだろうか。&lt;br /&gt;それがこのRecordMyDesktopだ。非常に軽く、綺麗な動画を作成してくれる。&lt;br /&gt;&lt;br /&gt;例によってYumexで「recordmydesktop」で検索し、インストールする。&lt;br /&gt;注意点として、基本的にこのソフトはインタフェースがない。コマンドラインだけで使うなら良いが、GUIが欲しいのであれば、「gtk-recordmydesktop」も一緒にインストールしよう。&lt;br /&gt;&lt;br /&gt;使い方は簡単なので割愛する。&lt;br /&gt;ブラウジングしている最中の動画をYouTubeにアップしたので、確認していただきたい。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/EHODDKUv-hg" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■その他&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;長くなりすぎるのもなんなので、続きは次回（最終回）。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2121799831198670838-8609261426450792414?l=torhamzedd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/8609261426450792414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2121799831198670838/posts/default/8609261426450792414'/><link rel='alternate' type='text/html' href='http://torhamzedd.blogspot.com/2011/07/windows-fedora15-56.html' title='Windowsにサヨナラだ！！〜 Fedora15 〜【5/6】'/><author><name>Seiji Ogawa</name><uri>https://profiles.google.com/117162472687033936198</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-dUCj1eajVPk/AAAAAAAAAAI/AAAAAAAAFHk/AEEt1taULZQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-hk_FRIbJ_wc/ThMVgWo3_YI/AAAAAAAACr8/dUGLaEqxsYc/s72-c/chrome01.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2121799831198670838.post-3926781209761064414</id><published>2011-06-08T23:20:00.033+09:00</published><updated>2011-06-25T18:46:44.292+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='swf'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyTAG'/><category scheme='http://www.blogger.com/atom/ns#' term='Rhytmbox'/><category scheme='http://www.blogger.com/atom/ns#' term='wmv'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><category scheme='http://www.blogger.com/atom/ns#' term='ID3'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='yumex'/><category scheme='http://www.blogger.com/atom/ns#' term='flash-plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='Fedora15'/><category scheme='http://www.blogger.com/atom/ns#' term='Gstream'/><category scheme='http://www.blogger.com/atom/ns#' term='SELinux'/><title type='text'>Windowsにサヨナラだ！！〜 Fedora15 〜【4/6】</title><content type='html'>今回はFedora15の設定をいろいろいじってみよう。&lt;br /&gt;&lt;br /&gt;設定に先立って、余計な機能は落としておく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■個人使用向け設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;rootになって、SELinuxを禁止にし、ファイアウォールを停止させる。&lt;br /&gt;SELinuxが有効になっていると、rootなのに出来ない事が多すぎて困る。&lt;br /&gt;ファイアウォールも然り。&lt;br /&gt;&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ su -&lt;br /&gt;パスワード&lt;br /&gt;# vi /etc/sysconfig/selinux&lt;br /&gt;&lt;/pre&gt;SELINUX=enforcing&lt;br /&gt;を&lt;br /&gt;SELINUX=disabled&lt;br /&gt;に変更し、保存する。&lt;br /&gt;&lt;br /&gt;現在どういう設定になっているのかを調べる場合、&lt;br /&gt;&lt;pre class="html" name="code"&gt;# getenforce&lt;br /&gt;&lt;/pre&gt;とうつと内容が表示されるので、最初からdisabledだったら何もしないで良いし、enforcingだったらファイルを編集することになる。&lt;br /&gt;&lt;br /&gt;次にファイアウォールを停止だ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service iptables stop&lt;br /&gt;&lt;/pre&gt;で停止する。&lt;br /&gt;もしコマンドが失敗するようなら、すでに停止しているということ。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# chkconfig iptables off&lt;br /&gt;&lt;/pre&gt;で自動起動させない設定となる。&lt;br /&gt;&lt;br /&gt;ファイアウォールに関しては、実はIPv6向けのiptablesが存在する。&lt;br /&gt;NTTのBフレッツを使っている場合、BフレッツはIPv6に対応していないので、IPv6向けiptablesが意味をなさなくなる。&lt;br /&gt;&lt;br /&gt;というわけで、IPv6向けのファイアウォールも止めてしまう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# service &amp;nbsp;ip6tables stop&lt;br /&gt;# chkconfig ip6tables off&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;念の為OSを再起動しよう。&lt;br /&gt;これでまずは準備が整った。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ネットワーク&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まずはなにはともあれ、ネットワークを自動的にONにする設定だ。&lt;br /&gt;毎回ログインする度にネットワークアイコンをクリックするのはおかしな話。&lt;br /&gt;というわけで、まずアカウント名をクリックし、メニューからシステム設定を選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-CKFBEfwDG4E/Te-BCeQK3WI/AAAAAAAACl4/obpluEZ1f0k/s1600/network01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-CKFBEfwDG4E/Te-BCeQK3WI/AAAAAAAACl4/obpluEZ1f0k/s320/network01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;システム設定の中にある「ネットワーク」を&lt;b&gt;シングルクリック&lt;/b&gt;する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Db2o0OYFWAU/Te-BUOD4p0I/AAAAAAAACl8/r_HfdrmmXFw/s1600/network02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-Db2o0OYFWAU/Te-BUOD4p0I/AAAAAAAACl8/r_HfdrmmXFw/s320/network02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ネットワーク」が表示されるので、右上のスイッチを「ON」にしよう。&lt;br /&gt;これはネットワークアイコンをクリックしてネットワークを有効にするのと同じ。&lt;br /&gt;&lt;br /&gt;OS起動時、自動的にネットワークに接続する設定は、右下の「オプション」ボタンをクリックする必要がある。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WUxTvH3AZeE/Te-BmbdqYlI/AAAAAAAACmA/7qGhzwiokJI/s1600/network03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-WUxTvH3AZeE/Te-BmbdqYlI/AAAAAAAACmA/7qGhzwiokJI/s320/network03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この画面の「自動接続する」にチェックをいれ、「保存」ボタンで終了しよう。&lt;br /&gt;これで次回からOS起動時、自動的にネットワークに接続してくれるようになる。&lt;br /&gt;&lt;br /&gt;IPv4の細かい設定をしたい人、IPv6の設定をしたい人（まだおすすめしない）などは、適宜該当するタブをクリックして設定していただきたい。&lt;br /&gt;&lt;br /&gt;※今回はDHCPで設定しているので特にしない。もし職場などが固定IPで接続すると決められている場合は適切に設定しよう。&lt;br /&gt;&lt;br /&gt;めでたしめでたし。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■システムアップデート&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、次はOS全体のアップデートを行う。&lt;br /&gt;システムのアップデートは「アプリケーション」＞「その他」＞「ソフトウェア更新」から実行する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-19EkMqIZy9U/Te-DN1SF0VI/AAAAAAAACmI/pQCDkvkQVI8/s1600/update01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-19EkMqIZy9U/Te-DN1SF0VI/AAAAAAAACmI/pQCDkvkQVI8/s320/update01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「アプリケーション」＞「システムツール」にも「ソフトウェアの更新」があるが、今回は「その他」からやってみようと思う。結局「ソフトウェアの更新」が起動するので目的は同じだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-McBMOFs9Es8/Te-DfEc8JvI/AAAAAAAACmM/mE9xl8bJtQU/s1600/update02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-McBMOFs9Es8/Te-DfEc8JvI/AAAAAAAACmM/mE9xl8bJtQU/s320/update02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ソフトウェア更新の設定」から「Check Now」ボタンをクリックしよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jNS2W40MTF8/Te-D0egkjrI/AAAAAAAACmQ/D5QhFRooE80/s1600/update03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-jNS2W40MTF8/Te-D0egkjrI/AAAAAAAACmQ/D5QhFRooE80/s320/update03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ソフトウェアの更新」が起動し、多くのアップデート項目が表示されるはずだ。&lt;br /&gt;詳しい人は、項目を確認し、適宜チェックボックスを外すことにより、アップデート対象から外すことができる。&lt;br /&gt;&lt;br /&gt;今回は全部アップデートするので、チェックボックスはそのままにして、右下にある「更新をインストール」ボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1emrsH7DIck/Te-EYLVp7dI/AAAAAAAACmU/mWfY_w9Iv9M/s1600/update04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-1emrsH7DIck/Te-EYLVp7dI/AAAAAAAACmU/mWfY_w9Iv9M/s320/update04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;左下にプログレスバーが表示され、パッケージのダウンロード、インストールなどの説明が表示される。&lt;br /&gt;&lt;br /&gt;ちなみにスクリーンショットの時計を見てもらえばわかるが、何故か1時間ほどかかってしまった。&lt;br /&gt;多分リポジトリがネットワーク的に遠い場所にあるのか、混んでいるのか、その両方、または全く別の問題なのかもしれない。&lt;br /&gt;&lt;br /&gt;IPv6の設定をすると遅くなると言うが（最初にIPv6での接続を試みてから、IPv4接続するらしい）今回はIPv6は設定していない。&lt;br /&gt;&lt;br /&gt;まぁ何れ解消する問題だと思うので、今回は良とする。&lt;br /&gt;&lt;br /&gt;途中で失敗してしまうようなことがあれば、時間を置いて再度試してみるのも良いかも知れない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ImCwFp5GPGs/Te-FVvXmJzI/AAAAAAAACmc/_0rkuwhUC0Q/s1600/update05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-ImCwFp5GPGs/Te-FVvXmJzI/AAAAAAAACmc/_0rkuwhUC0Q/s320/update05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;今回のアップデートでは再起動が必要とのことで、ネットワーク自動起動のテストもかねて、素直に再起動してみることにする。&lt;br /&gt;&lt;br /&gt;ちなみにこのダイアログ、1分ほど放置すると消えてしまった。&lt;br /&gt;つまり「閉じる」ボタンがクリックされたときの処理と同じことが自動的に行われてしまうのかも知れない。&lt;br /&gt;&lt;br /&gt;だとしたらちょっとどうなんだろう？&lt;br /&gt;&lt;br /&gt;まぁ良い。さっさと再起動してみることにする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-RTUe-IwyLAQ/Te-F0_hnjMI/AAAAAAAACmg/tUWGCyx4_U8/s1600/update06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-RTUe-IwyLAQ/Te-F0_hnjMI/AAAAAAAACmg/tUWGCyx4_U8/s320/update06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;再起動してログインしてみたところ、ネットワークアイコンは正しく接続されている状態のようだ。&lt;br /&gt;めでたしめでたし。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ソフトウェアのインストール拡張&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://goo.gl/KjEiP"&gt;yum&lt;/a&gt;というコマンドを知っているだろうか。&lt;br /&gt;Yellowdog Linuxで使われているインストールシステムだ。&lt;br /&gt;&lt;br /&gt;Yellowdog Update Managerの略でyumということだ。発音は、俺は「ユム」ではなく「ヤム」と呼んでいるので、これからもずっとヤムと発音する予定だ。&lt;br /&gt;&lt;br /&gt;ところでこのyumにはプラグインを入れることができる。ミラーサイトを素早く見つけてくれる（という噂の）プラグインだ。これはいれておいて損はない。&lt;br /&gt;&lt;br /&gt;「アプリケーション」＞「システムツール」から「端末」を開く。&lt;br /&gt;よく使うのでデスクトップのツールバーにドラッグし、ショートカットボタンを作っておくと便利だ。&lt;br /&gt;&lt;br /&gt;端末が起動したらsuコマンドでrootになり、以下のコマンドでインストールする&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum -y install yum-fastestmirror&lt;br /&gt;&lt;/pre&gt;これで自動的に、ネットワーク的に近いミラーを選択してくれるようになる（はず）。&lt;br /&gt;&lt;br /&gt;yumの仕組みだけど、自動的にソースをダウンロード＞コンフィグ＞インストーラ作成（rpm）＞インストールという流れを自動でやってくれる（らしい）。&lt;br /&gt;&lt;br /&gt;とにかくyumはすごく便利だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NisfyjLTJ3I/Te-IOzoH29I/AAAAAAAACmo/5JSiYVI689U/s1600/yum%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-NisfyjLTJ3I/Te-IOzoH29I/AAAAAAAACmo/5JSiYVI689U/s320/yum%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25A9%25E3%2582%25B0%25E3%2582%25A4%25E3%2583%25B3.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;さて、yumが便利なのは便利なのだが、例えばとあるパッケージが欲しい場合、その依存関係も一緒に落としておかないといけない。&lt;br /&gt;目的のパッケージより先にインストールしておかないといけなかったり、いろいろ面倒だ。&lt;br /&gt;&lt;br /&gt;それにいちいちコマンドラインでyumコマンド打つのは、デスクトップ環境としてはあまり適切ではないのではないか、と思うこともある。&lt;br /&gt;&lt;br /&gt;ただでさえ便利なyumコマンドだが、さらに便利なアプリがある。yumコマンドを拡張し、さらにGUIがついた「Yum Extender」通称「yumex」だ。&lt;br /&gt;&lt;br /&gt;これをインストールしておこう。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum -y install yumex&lt;br /&gt;&lt;/pre&gt;これで「アプリケーション」＞「システムツール」＞「Yum Extender」でいつでも起動することができる。&lt;br /&gt;&lt;br /&gt;試しに起動してみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Zw_4fo8ghSM/Te-JTiMVDwI/AAAAAAAACms/r2ehlcBSIP0/s1600/yumex01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-Zw_4fo8ghSM/Te-JTiMVDwI/AAAAAAAACms/r2ehlcBSIP0/s320/yumex01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;yumexは最初にrootパスワードを聞かれるので素直に入力する。&lt;br /&gt;これで何でもパッケージをインストールすることが可能だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RLIHoAuvYHA/Te-JgaYKE-I/AAAAAAAACmw/a0jZNNw5aiI/s1600/yumex02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-RLIHoAuvYHA/Te-JgaYKE-I/AAAAAAAACmw/a0jZNNw5aiI/s320/yumex02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;先ほど「ソフトウェアの更新」を実行したので、初回では何もパッケージが表示されない。&lt;br /&gt;もし更新すべきパッケージがある場合、「更新」ラジオボタンが選択されている場合はその内容がすべて赤文字で表示される。&lt;br /&gt;&lt;br /&gt;今回は何も表示されてないので、何かパッケージを検索し、リストを表示させてみることにする。&lt;br /&gt;ハリウッドでも使われているという3Dモデリングソフトの「blender」を検索してみよう。&lt;br /&gt;&lt;br /&gt;少しまつと、以下のようにblenderに関係するパッケージが一覧で表示される。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-I_3Q2Bf5Hos/Te-KLSXk03I/AAAAAAAACm0/fIxJuPcz8ac/s1600/yumex03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-I_3Q2Bf5Hos/Te-KLSXk03I/AAAAAAAACm0/fIxJuPcz8ac/s320/yumex03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;で、yumexの何が凄いかというと、この中で「blender」だけにチェックを入れて「適用」ボタンをクリックしたとしても、ちゃんと必要な依存関係も自動的に探してくれるところだ。&lt;br /&gt;&lt;br /&gt;つまり、目的のパッケージ名が分かれば、それをチェックし、右下の「適用」ボタンをクリックするだけ、ということになる。&lt;br /&gt;&lt;br /&gt;ものすごい便利。&lt;br /&gt;&lt;br /&gt;当然リポジトリにあるものしか表示されないが、yumexで扱うリポジトリは、左側にあるボタンの「有効なリポジトリを選択する」ボタンで管理できる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tzmoTQqtKIY/Te-K1180fcI/AAAAAAAACm4/kDfgc-ny15k/s1600/yumex04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-tzmoTQqtKIY/Te-K1180fcI/AAAAAAAACm4/kDfgc-ny15k/s320/yumex04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これから可能なかぎり、このyumexを使ってパッケージをインストールしていく予定。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■便利なライブラリ&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;いろいろ開発作業をしていると、あれがない、これがない、となる場合が多い。&lt;br /&gt;その時入れれば良い話だけど、ここである程度一気に入れておいてしまおうと思う。&lt;br /&gt;&lt;br /&gt;入れるパッケージは以下。&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;nkf&lt;/th&gt;&lt;td&gt;ネットワーク漢字トランスファ。つまり文字コード変換のライブラリ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;expect&lt;/th&gt;&lt;td&gt;対話型コマンドを便利に使うライブラリ。パスワード自動生成機能のmkpasswdが入っているので重宝。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;lv&lt;/th&gt;&lt;td&gt;lessなどのようなコマンドラインのテキストビューア。grepなどのフィルタとして使えるので重宝。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;kcc&lt;/th&gt;&lt;td&gt;文字コードを判別してくれる。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;convmv&lt;/th&gt;&lt;td&gt;ファイル名の文字コードを変換。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;cmake&lt;/th&gt;&lt;td&gt;クロスプラットフォーム向けのmake。いれておくと何かの時に便利。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;alacarte&lt;/th&gt;&lt;td&gt;GNOMEのメニューエディタ。これがないと結構不便。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;というわけで、早速Yumexでいれてみよう。&lt;br /&gt;&lt;br /&gt;Yumexでインストールする場合、インストール可能な全パッケージをスクロールしながら目で追ってさがすのは相当疲れるので、1つ1つを検索してチェックを入れていくことにする。&lt;br /&gt;&lt;br /&gt;まずは「nkf」を検索。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y6PQKIUzPEY/TfNZ3b3zZvI/AAAAAAAACnM/cGm-zSMIRrM/s1600/nkf.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-Y6PQKIUzPEY/TfNZ3b3zZvI/AAAAAAAACnM/cGm-zSMIRrM/s320/nkf.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「nkf」にチェックを入れる。&lt;br /&gt;次に「expect」を検索。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9fzwhfaet48/TfNaFyLiAgI/AAAAAAAACnQ/PdKRH_Woqs0/s1600/expect.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-9fzwhfaet48/TfNaFyLiAgI/AAAAAAAACnQ/PdKRH_Woqs0/s320/expect.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;こちらも「expect」にチェックを入れる。&lt;br /&gt;次に「lv」を検索。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-p7_CwnEJ-vE/TfNaNaHFsiI/AAAAAAAACnU/uH5pCN79oT4/s1600/lv.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-p7_CwnEJ-vE/TfNaNaHFsiI/AAAAAAAACnU/uH5pCN79oT4/s320/lv.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「lv」にチェックを入れる。&lt;br /&gt;次に「kcc」を検索する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jOxvTOMlib4/TfNaWdAAcAI/AAAAAAAACnY/IgoJnc4p8OY/s1600/kcc.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-jOxvTOMlib4/TfNaWdAAcAI/AAAAAAAACnY/IgoJnc4p8OY/s320/kcc.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「kcc」にチェックを入れる。&lt;br /&gt;次に「convmv」を検索する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VL_ghsUxJ2k/TfNaeWsQvoI/AAAAAAAACnc/kuOL5PHFYko/s1600/convmv.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-VL_ghsUxJ2k/TfNaeWsQvoI/AAAAAAAACnc/kuOL5PHFYko/s320/convmv.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「convmv」にチェックを入れる。&lt;br /&gt;次に「cmake」を検索する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-XY5GR0aNiTw/TfNargBzh0I/AAAAAAAACng/Dmx-M91kHa8/s1600/cmake.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-XY5GR0aNiTw/TfNargBzh0I/AAAAAAAACng/Dmx-M91kHa8/s320/cmake.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「cmake」にチェックを入れる。&lt;br /&gt;次に「alacarte」を検索する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2D9Y1FnQaVY/TfNa36KmCMI/AAAAAAAACnk/nxaL0jsI0xs/s1600/alacarte.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-2D9Y1FnQaVY/TfNa36KmCMI/AAAAAAAACnk/nxaL0jsI0xs/s320/alacarte.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これで一通りチェックをいれたので、まとめてみてみよう。&lt;br /&gt;Yumexの左側にあるボタンで「保存しているアクション」というのがあるのでクリックしてみる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fjXm4ux_voA/TfNbVZoChMI/AAAAAAAACno/fMbkqMVwFFc/s1600/PENDING.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-fjXm4ux_voA/TfNbVZoChMI/AAAAAAAACno/fMbkqMVwFFc/s320/PENDING.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;特に問題がなければ右下の「適用」をクリックだ。&lt;br /&gt;直ぐにダウンロード、インストールが始まる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-yOoQxPDj6RE/TfNbep38kKI/AAAAAAAACns/c70dQtOA4fc/s1600/INSTALL.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-yOoQxPDj6RE/TfNbep38kKI/AAAAAAAACns/c70dQtOA4fc/s320/INSTALL.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールが終わるとこのような、ちょっと不思議な日本語ダイアログが表示される。&lt;br /&gt;結構高圧的だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-TC8ltN7xyMk/TfNboQw669I/AAAAAAAACnw/AchcjFfXeUo/s1600/FINISH.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-TC8ltN7xyMk/TfNboQw669I/AAAAAAAACnw/AchcjFfXeUo/s320/FINISH.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「終了したいですか？」&lt;br /&gt;&lt;br /&gt;別にそんな事いわれなくたって、killして終了させることだってできるんだぜ？&lt;br /&gt;と言いたくなるような、独りよがりの独善的文章ではないか。やたら遺憾ではあるが、無理やり日本誤訳したのか、もしくは相当センスのある日本人が翻訳したのだろう。&lt;br /&gt;&lt;br /&gt;ここでは「はい」をクリックし、Yumexを終了する。&lt;br /&gt;&lt;br /&gt;そのあとちゃんとインストールされているのかをチェック。&lt;br /&gt;メニューエディタは「アプリケーション」＞「その他」＞「メイン・メニュー」から、あとのコマンドは端末から「whereis」コマンドで場所を調べてみる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-zLQIs6SRCPQ/TfNcPbG2nuI/AAAAAAAACn0/NZhGwwTBCbk/s1600/LASTCHECK.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-zLQIs6SRCPQ/TfNcPbG2nuI/AAAAAAAACn0/NZhGwwTBCbk/s320/LASTCHECK.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■ユーザ環境設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、一通り、イカす便利ちゃん達をインストールし終わったところで、今度は将来の禍根を経つためのちょっとした作業を付け加えようじゃないか。&lt;br /&gt;&lt;br /&gt;どういう事かというと、つまりそれはホームディレクトリ内に勝手に無断に無許可に作られた、日本語のディレクトリだ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LiL7Z3ZfX08/TfNhdfLI8dI/AAAAAAAACn8/Y_HfbouH_OQ/s1600/JapaneseDirectories.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-LiL7Z3ZfX08/TfNhdfLI8dI/AAAAAAAACn8/Y_HfbouH_OQ/s320/JapaneseDirectories.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ダウンロード」「テンプレート」「デスクトップ」などなど。&lt;br /&gt;&lt;br /&gt;実はこれ、本体は英語なんだが、使用者のロケールによって、母語で表示しているという仕組みらしい。たしかWindows7も同じような仕組みを使っているような気がする。&lt;br /&gt;&lt;br /&gt;別に日本語でディレクトリ名表示しててもいいじゃん！と思うかも知れないが、いざコマンド入力する際に、いちいち漢字変換とアルファベットで入力を切り替えるのが面倒！と思う人もいるのではないかと思う。&lt;br /&gt;&lt;br /&gt;個人的には別にどっちでもいいじゃねーか！とは思うんだが、切り替える方法を知っておくのは良いことだと思うので、その方法を紹介したい。&lt;br /&gt;&lt;br /&gt;まずは端末を開き、今ログインしているユーザで以下のコマンドを入力する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ LANG=C xdg-user-dirs-gtk-update&lt;br /&gt;&lt;/pre&gt;このコマンドを実行すると、画面にダイアログが表示され、「Update standard folders to current language?」と聞かれる。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ev3kTd3zCvE/TfNif8fCCWI/AAAAAAAACoE/ez6JsmwlqhI/s1600/xdg-user-dirs-gtk-update.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://2.bp.blogspot.com/-Ev3kTd3zCvE/TfNif8fCCWI/AAAAAAAACoE/ez6JsmwlqhI/s320/xdg-user-dirs-gtk-update.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Current folder name」を「New folder name」にしますか？ということだ。&lt;br /&gt;※ディレクトリじゃなくてfolderって書いてあるね。次からフォルダと呼ぶか。&lt;br /&gt;&lt;br /&gt;ここで「Update Names」をクリックしても良いのだが、実はこれログインする度に毎回聞かれてしまうので、「Don't ask me this again」にチェックをいれた状態で「Update Named」ボタンをクリックしよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-3wFoxIf7LUo/TfNiyw2wToI/AAAAAAAACoI/RmLTB65jyP8/s1600/xdg-user-dirs-gtk-update_after.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://4.bp.blogspot.com/-3wFoxIf7LUo/TfNiyw2wToI/AAAAAAAACoI/RmLTB65jyP8/s320/xdg-user-dirs-gtk-update_after.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダイアログは一瞬で閉じ、端末になにやら結果が表示されている。&lt;br /&gt;どうやら成功したようだ。&lt;br /&gt;&lt;br /&gt;早速「場所」から「ホームフォルダ」をひらいてみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-46aklBzeBbA/TfNjdK6ekLI/AAAAAAAACoM/_vROG5pIWZY/s1600/xdg-user-dirs-gtk-update_after_etc.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://3.bp.blogspot.com/-46aklBzeBbA/TfNjdK6ekLI/AAAAAAAACoM/_vROG5pIWZY/s320/xdg-user-dirs-gtk-update_after_etc.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;なんと、「ダウンロード」1個だけが残ってしまっているではないか！&lt;br /&gt;これはどういう事か！中身を見てみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cBHQy3WMgcI/TfNjkPwPTII/AAAAAAAACoQ/6dVfNIPQ0tY/s1600/xdg-user-dirs-gtk-update_after_etc_notempty.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://2.bp.blogspot.com/-cBHQy3WMgcI/TfNjkPwPTII/AAAAAAAACoQ/6dVfNIPQ0tY/s320/xdg-user-dirs-gtk-update_after_etc_notempty.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードしたファイルが1個残っていたようだ。&lt;br /&gt;そう、つまり中身が空でないといけないということだ。これは良く解らんが、内部で英語名で新規にフォルダを作ったあと、母語のフォルダをけしているんだけど、中身があるから消さなかった、ということなんだと思う。&lt;br /&gt;&lt;br /&gt;ちょっと期待と違う動きだけど、まぁこの場合は「Download」フォルダが作られていて、システムはそっちをみるので、「ダウンロード」の中身を「Download」に移動し、「ダウンロード」はフォルダを削除するのが良い。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7FlaIF4c18M/TfNkPkQDEVI/AAAAAAAACoU/qjw_woQG8Lw/s1600/%25EF%25BD%2592%25EF%25BD%258DRf.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://2.bp.blogspot.com/-7FlaIF4c18M/TfNkPkQDEVI/AAAAAAAACoU/qjw_woQG8Lw/s320/%25EF%25BD%2592%25EF%25BD%258DRf.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これでホームフォルダ内のフォルダがすべて英語表記になり、統一がとれた。&lt;br /&gt;&lt;br /&gt;念のため一旦ログアウトし、ログインし直しておこう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■Flashプラグインのインストール&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;今の時代必須とは思わないんだが、どうも依存度がまだまだ高いswf。つまりFlashだ。&lt;br /&gt;個人的にFlashという技術は、まるで剣道の試合にピストルを持ち込んだような卑怯なずるい手段だと思っている。&lt;br /&gt;&lt;br /&gt;ピストルで相手をたおしても、面、胴などの技ではないので結局点はもらえないが、勝つには勝てる、そんなずるい存在だ。&lt;br /&gt;&lt;br /&gt;つまり反則ってこと。&lt;br /&gt;&lt;br /&gt;中国人が平気で列に割り込んだり、韓国人がマックでロッテリアを食べたりするような文化の違いとかではなく、そもそもそれをやるか！？という紳士協定を完全に無視して一人勝ちしようとしたAdobeの陰謀である。&lt;br /&gt;&lt;br /&gt;ページ遷移という仕組みをぶち壊したためブックマークすらできないし、セキュリティホールを付かれてMacに2分で侵入を許してしまうような明らかに悪意のあるプラグインではあるが、現実問題、利用者の母数は多いのではないだろうか。&lt;br /&gt;&lt;br /&gt;というわけで、まずはブラウザを起動して、何かswfを表示するサイトを検索してみよう。&lt;br /&gt;今回は「flash games」と検索してみたら、そのままのサイトが出てきたので、早速見てみた。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZIuFnXc-H-M/TfNp3DK-mcI/AAAAAAAACoc/OlFdHVsspWs/s1600/plugin_disabled.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-ZIuFnXc-H-M/TfNp3DK-mcI/AAAAAAAACoc/OlFdHVsspWs/s320/plugin_disabled.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;swfが表示させるべき場所に、ポツンとブロッグマークが表示されている。&lt;br /&gt;なるほど、Flashプラグインは入っていないようだ。&lt;br /&gt;&lt;br /&gt;まぁデフォルトで入っていたら、セキュリティ的に問題だし、使いたいなら自分で入れろということだろうね。&lt;br /&gt;&lt;br /&gt;早速このブロックアイコンをクリックしてみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ruEKnz32EGQ/TfNqGxhwJzI/AAAAAAAACog/kPg3zrU5qLE/s1600/plugin_cannotdownload.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-ruEKnz32EGQ/TfNqGxhwJzI/AAAAAAAACog/kPg3zrU5qLE/s320/plugin_cannotdownload.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;さすがAdobeだ！完全におちょくってる。&lt;br /&gt;こうなったら手動でインストールするしかないわけだ。&lt;br /&gt;&lt;br /&gt;というわけで、早速手動でインストールしようじゃないか。&lt;br /&gt;まずは端末を開き、rootになる。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ su -&lt;br /&gt;パスワード&lt;br /&gt;&lt;/pre&gt;rootになったらまずは忌々しいAdobeのリポジトリをインポートする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm&lt;br /&gt;# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux&lt;br /&gt;&lt;/pre&gt;インポートが終わったら、内容をアップデートする。&lt;br /&gt;&lt;pre class="html" name="code"&gt;# yum check-update&lt;br /&gt;&lt;/pre&gt;さて、ここから先はYumexでインストールしてみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Pl5IVAslIqY/TfNrTlQ2HeI/AAAAAAAACoo/GSsUXWg_Wpc/s1600/yumex.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-Pl5IVAslIqY/TfNrTlQ2HeI/AAAAAAAACoo/GSsUXWg_Wpc/s320/yumex.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Yumexでは「flash-plugin」を検索する。これをインストールするため、右下の「適用」ボタンでインストールする。&lt;br /&gt;&lt;br /&gt;※flash-pluginのインストールで、「nspluginwrapper」「alsa-plugins-pulseaudio」「libcurl」もインストールされる&lt;br /&gt;&lt;br /&gt;インストールが終わったら、またブラウザで「flash games」を検索し、適当なゲームを表示してみよう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-K8fsu0M6-Ys/TfNr0odiB5I/AAAAAAAACos/7gzDUfRNQJU/s1600/flash_enabled.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-K8fsu0M6-Ys/TfNr0odiB5I/AAAAAAAACos/7gzDUfRNQJU/s320/flash_enabled.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;めでたくswfが実行された。これでFlashでゲームを遊んだり、良く解らん程無駄に凝った広告flashを閲覧することができるようになったわけだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;■MP3を再生する&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;さて、作業中に音楽を聞く人って多いんじゃないかな。&lt;br /&gt;かくいう俺も、ジャンルまとめてシャッフル再生なんかを好んで流している。&lt;br /&gt;&lt;br /&gt;早速だが、いくつかの音楽ファイルをコピーして聞いてみようと思う。&lt;br /&gt;あなたはあなたが愛してやまないアーティストのmp3ファイルを用意しておこう。&lt;br /&gt;&lt;br /&gt;コピー先は「/home/＜ユーザ名＞/Music」だ。&lt;br /&gt;あなたのアカウント名が「daiben」なら、「/home/daiben/Music」となる。&lt;br /&gt;&lt;br /&gt;デスクトップの「場所」から「Music」を選択しても良い。&lt;br /&gt;&lt;br /&gt;もしVMwareを使っているのであれば、WIndowsから直接ドラッグ＆ドロップでコピーすることができる。&lt;br /&gt;が、かなりの確率で失敗する。コピーが終わったと言われるが、実はファイル1個、フォルダ1個だけしかコピーされてないなんてことがアスランだ。いや、ザラだ。&lt;br /&gt;&lt;br /&gt;出来ればSSHクライアントなどでFedora15へ接続してmp3をアップするのが良いだろう。具体的な方法はまだ割愛するが、直接ドラッグ＆ドロップも、強制的に何度かやり直せばできる。&lt;br /&gt;&lt;br /&gt;さて、いくつかのアーティストのフォルダをコピーしてみた。&lt;br /&gt;この状態で、Fedoraデフォルトの音楽再生ソフト「Rhythmbox」を起動してみよう。&lt;br /&gt;「アプリケーション」＞「サウンドとビデオ」＞「Rhythmbox ミュージック・プレイヤー」だ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xqYDnmffCh0/TfQvLcOJkDI/AAAAAAAACo0/ci-WpIpzMy4/s1600/music_folder.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-xqYDnmffCh0/TfQvLcOJkDI/AAAAAAAACo0/ci-WpIpzMy4/s320/music_folder.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Rhythmbox」は指定されたフォルダ内を自動でチェックする機能があるので、しばらくすれば勝手にリストに音楽が追加されるんだが、一度その機能をONにしなければいけない。&lt;br /&gt;&lt;br /&gt;というわけで、「Rhythmbox」の「編集」＞「設定」から「Rhythmbox Preferences」を開き、「ミュージック」タブを選択する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-g0muF5r202c/TfQv8-4BXKI/AAAAAAAACo8/jcbFq6yz8bk/s1600/Rhythmbox_Preferences.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-g0muF5r202c/TfQv8-4BXKI/AAAAAAAACo8/jcbFq6yz8bk/s320/Rhythmbox_Preferences.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「音楽ファイルを格納する場所」には、最初から自分のホームフォルダ内のMusicが選択されているのでそのままにしておく。&lt;br /&gt;&lt;br /&gt;別の場所に入れた人は、「参照」ボタンでそのフォルダを設定する。再帰的に監視してくれるので、ひとつ上のフォルダなどを設定することができる。&lt;br /&gt;&lt;br /&gt;そしてその下にある「ライブラリを監視する」にチェックをいれ、「閉じる」ボタンで閉じよう。&lt;br /&gt;そうすると即座に指定されたフォルダ内から音楽ファイルをライブラリに追加してくれる。&lt;br /&gt;&lt;br /&gt;と思ったら、全く追加されないではないか！これは・・・。&lt;br /&gt;&lt;br /&gt;というより、最初からmp3が認識されていないということなんだな。つまりいろいろ大人の事情があり、mp3は多くのLinuxでは再生、録音ができない状態でリリースされているわけだ。&lt;br /&gt;&lt;br /&gt;というわけで、早速mp3のライブラリをぶち込んでみようと思う。&lt;br /&gt;一旦「Rhythmbox」は終了させておこう。&lt;br /&gt;&lt;br /&gt;最初にやることは、リポジトリの追加。&lt;br /&gt;端末をひらいてrootになり、以下のコマンドでリポジトリを設定する。&lt;br /&gt;&lt;pre class="html" name="code"&gt;$ su -&lt;br /&gt;パスワード&lt;br /&gt;#&amp;nbsp;rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm&lt;br /&gt;#&amp;nbsp;rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これでYumexを起動すると、RPMFusionというリポジトリが増えているはずだ。&lt;br /&gt;というわけでYumexを起動する。&lt;br /&gt;&lt;br /&gt;起動すると、RPMFusion自体の更新がある場合があるので、これは更新しておこう。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-L40KOcqu7r8/TfQ2tQzwNZI/AAAAAAAACpE/yQV8FXYtjcM/s1600/RPMFusion.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-L40KOcqu7r8/TfQ2tQzwNZI/AAAAAAAACpE/yQV8FXYtjcM/s320/RPMFusion.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;右下の「全て選択」ボタンをクリックし、「適用」ボタンをクリックする。&lt;br /&gt;途中、GPG鍵の併合など聞かれる場合があるが、すべて「はい」ボタンでOK。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wKAbfK6u1yY/TfQ3QvvhhoI/AAAAAAAACpI/zPbMrD__dWE/s1600/RPMFusion2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-wKAbfK6u1yY/TfQ3QvvhhoI/AAAAAAAACpI/zPbMrD__dWE/s320/RPMFusion2.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;正常にアップデートが終わったら、次にmp3などの再生に必要なライブラリをインストールするのでYumexは終わらせない。&lt;br /&gt;「いいえ」ボタンでYumexに戻る。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-whKuTddqaSM/TfQ3hwxG1rI/AAAAAAAACpM/wp3nhozj_yc/s1600/RPMFusion3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://3.bp.blogspot.com/-whKuTddqaSM/TfQ3hwxG1rI/AAAAAAAACpM/wp3nhozj_yc/s320/RPMFusion3.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;必要なライブラリは「Gstreamer」だ。いくつか必要なものがあるのでリストアップしておく。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;gstreamer-ffmpeg&lt;/li&gt;&lt;li&gt;gstreamer-plugins-bad&lt;/li&gt;&lt;li&gt;gstreamer-plugins-bad-free-extras&lt;/li&gt;&lt;li&gt;gstreamer-plugins-bad-nonfree&lt;/li&gt;&lt;li&gt;gstreamer-plugins-ugly&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;すでにいくつかはインストールされていると思うが、上記リストにあるものは全てにチェックが入った状態にしよう。&lt;/div&gt;&lt;div
