作成者別アーカイブ: uraku

ミリオンライブ4thライブに見たミリオンライブ

「THE IDOLM@STER MILLION LIVE! 4thLIVE TH@NK YOU for SMILE!!」をライブビューイングにてDAY1、DAY2、DAY3とも参加してきました。ミリオンライブとしての大型ライブは周年の物としては4回目、私自身が参加したものとしては3回目になります。今回はミリオンライブとしての最初の曲「Thank You!」の歌詞の中にも登場する武道館での開催となり、大きな意味を持つであろう事が分かっていたライブでした。3日間、それぞれ違った感想が有りましたのでまとめておきたいと思います。

※小学生並みの感想と言っては小学生に失礼な文章力です。
※特に深い考察とかも無いです。
※人の感想を取り込んでしまう前に自分自身の感想を残しておきません?大丈夫?
※それでもいいなら続きをどうぞ。

Day1 Sunshine Theater  (2017年3月10日 (金) 18:00開演)

やはり武道館というと八角形の独特な形、ロックの聖地としての扱いや、そもそもライブをするための建物ではないが故の音響に対するあまりよくない評判などがイメージとして有ります。今回は八角形の北方にステージを置くシンプルな構成ながらも、やや前後に長いステージ、そのステージ前後に大きな高低差を設け上下に動くエレベーターで繋ぐなど、あまり広くはない中で様々な動きや見せ方が出来るように工夫されたステージとなっていました。特に太陽をモチーフにした「Sunshine Rhythm」のステージという事も有って、前後・上下・歌いながらの移動など曲中でのダイナミックな展開が繰り広げられました。

開幕での「Thank You!」からユニット表題曲の「サンリズム・オーケストラ♪」で明るさとテンションを序盤から持ち上げ、その日の方向性を今日はこういう日だと分かりやすく示します。4曲目の夏川椎菜さん演じる望月杏奈の「Happy Darling」では(体調の良い週ではなかった事も有って)早くも声が枯れました。

各ブロックごとにソロ曲→小ユニット曲(Sunshine Rhythmの中に更に星座の名前を冠した小ユニットが有ります)を繰り返す構成は分かりやすさが有りながらも、各ソロ曲の頭と最後に次のキャストの方が登場し、一部を一緒に歌う・動きも入れてくるなど、密度を上げて曲をつめこみつつも新しい表現としても楽しめる面白さがありました。また、各ソロ曲はこれまで大型ライブでは未披露の曲が優先して選ばれており、「これはこの3日間で全ての曲が聴けてしまうんだろうな」という期待感もありました。

特に印象に残っている曲としては郁原ゆうさん演じるエミリー・スチュアートの「微笑み日和」。これまでのパフォーマンスもかなり「エミリー」であった郁原さんですが、今回の微笑み日和はかなりのびのびとしている良さが有りました。エミリーと郁原さんのかわいさをさらに引き立てた特徴的な花のかんざしは楽屋花として贈られた物からとの事で、とても良い巡り合わせだったと思います。今回、3日間全体の印象としても、各キャストこれまでに感じられた緊張が薄れているように感じたり、自らも「これまでより出来る事が増えた」と述べられるような、4年の積み重ねと、技術だけではないより自然なパフォーマンスが感じられるライブでした。Day1に関しては個人的には島原エレナ役の木下ひなた役の角元明日香さん、田村奈央さんの魅力は3rdの頃に比べても明らかに強く感じられました。エレナの活力やしなやかさなど魅力がしっかり伝わってくる良いパフォーマンスだったように思います。

トークパートもカプリコーン (夏川椎菜さん、山口立花子さん、木戸衣吹さん)らによる(NO CURRY NO LIFEという曲が)カレーと彼をかけている事を山口立花子さんが説明し、カレーの曲だと思っていたと2人が漏らすくだりなど、コミカルな物が多かったですね。

後半ではサプライズ的に「THE@TER ACTIVITIES 01」のフルメンバーが揃い(今日の出演者で元々いるのはロコ役の中村温姫さんだけですよ!?)、同CDの「創造は始まりの風を連れて」のオリジナルメンバーだからこその力強さと空気感を体感しました。同CDでは勇者役として登場する七尾百合子の「本心から好きで歌っている感じのカッコよさ」をいかんなく表現出来る伊藤美来さん、これまでにもクールな曲を歌ってきた箱崎星梨花役の麻倉ももさんがやはりこの曲にも合っていたりなど、いろいろな良さが有る曲です。他にも乙女ストーム!のメンバーが揃ったりなど、何でもアリな感じの初日となりました。TAシリーズ収録曲の「DIAMOND DAYS」は今回終盤での全体曲となったのですが、映画収録であるTAの曲としてはステージ寄りだなぁと思っていたので、こういう場面で改めて聴けると良い歌詞で、これからも今のこの場所、出来る事を大切にしながらも未来へ進んでいく、武道館ライブ初日として良い締めだったと思います。そして笑えるぐらいに星の流れる綺麗な映像(多くの星の中に太陽と月のモチーフも一部で流れてくるのも良いですね)と共に「Dreaming!」、アンコールは「Thank You!」でのDay1終演です。これまでの「Thank You!」よりも歌っている参加者が多いのも印象的でした。

発表……パ・リーグコラボ、どうなるんでしょうね?

なお、音響面ですが、これはライブビューイングで聴いているから会場とはまた違うのかもしれませんが、武道館のもともとの音のよくなさからすると音響スタッフはかなり頑張っているんじゃないかなと思います。現地で聴いた事の有る他の武道館ライブでは正直もっとよくないものが有りました……。

最後に、これはポジティブな意見でもネガティブな意見でもないのですが、やっぱり自分のライブの楽しみ方って「CD音源とはまた異なったパフォーマンスを観たい」ってのがメインだなーと再確認したDay1でもありました。

Day2 BlueMoon Theater (2017年3月11日 (土) 17:00開演)

元々私はLTFシリーズでは02である「BlueMoon Harmony」が最も好みだったのですが、やはりそのユニットによるBlueMoon Theaterは圧倒的に感じる公演でした。Day1と同様に2曲目にユニット表題曲「brave HARMONY」が入ってくるのですが、スピード感ある展開と大人数による声のハーモニーを感じられる曲構成、それに負けないキャストの歌唱力相まってただただカッコよく、カッコよさで涙が出てきました。ライブではそんなに涙しないのですが、どうもカッコよさで殴られると私へのダメージが入りやすいようです……。

前半で特に印象に残っているソロ曲が天空橋朋花役の小岩井ことりさんによる「Maria Trap」。2ndライブなどでも有った長い髪をくるくる回す、朋花の風格と煽情的な演技も有りましたし、曲全体としてとてもこの荘厳な曲をノリノリで歌っているのが伝わってくる、ライブとしてとても映える良いパフォーマンスになりました。今回の小岩井さんはトークパートでも「七の誓い」をぶっこんできたり(そしてそれにプロデューサーらも答える)するような遊びを入れてきたり、終盤では(プラチナスターライブ編の中でも仲間の繋がりや信頼に重きを置いたストーリーであった)ミルキーウェイのメンバーとして、そして”こっこちゃん”個人としても友達を増やしていきたいと語ってきたなかでの武道館での「星屑のシンフォニア」は感極まる物だったのだろうと想像します。「星屑のシンフォニア」途中のセリフではミルキーウェイのもう人のメンバーである星井美希を暗示するメッセージが入ったのもよかったですね。

サジタリアス (藤井ゆきよさん、戸田めぐみさん、阿部里果さん)らによる、「Raise the FLAG」はそれぞれの熱い勢いを持った歌唱、それぞれがキーマンとして重要なこの曲でも特に藤井ゆきよさんはこの曲のベース部となる安定感とイメージを演出しているのではないでしょうか。他にも永吉昴役の斉藤佑圭さんによる「Day After “ Yesterday”」の前向きで透き通った歌詞と歌唱、ダンスではなく歌でも魅せられる舞浜歩を体現する戸田めぐみさんによる「Get My Shinin’」、演奏の仕方や歌詞振りなど様々な部分で変化の有ったジュリア役愛美さんによる「流星群」はまさしく「ライブハウス武道館」であったし、高山紗代子役の駒形友梨さんによる「vivid color」は途中涙ぐみながらもしっかりと歌いきり「これは完全に歌いきったな」という感慨を感じられました。これから今後更にクオリティが上がっていくであろうポテンシャルを感じさせる「待ちぼうけのLacrima」や、開放感を感じさせまさしく風を感じる北上麗花役平山笑美さんによる「FIND YOUR WIND!」など、Day2はそもそも私の好みの公演なのでいくらでも文字数が増えてしまいますね。

最後のユニット曲となる「Flooding」ではミリオンの中でも特に「青」ユニットである、クレシェンドブルー(田所あずささん、平山笑美さん、雨宮天さん、小笠原早紀さん、麻倉ももさん)が満を持して登場、初めてのフルメンバー登場による激しい歌のぶつかり合いはすさまじいものでした。3rdライブでは野々原茜役の小笠原早紀さんの居ない形での登場となっていたのですが、やはりクレッシェンドブルーには茜の存在も大切であると改めて感じる内容となっていました。小笠原さんも今回の為に相当に仕上げてきたのだろうと思います。

最後のあいさつでは、戸田めぐみさんがかつて声優としてまだあまりうまく行っていなかった中で仕事を頂いたのが今日この日であり、ミリオンライブの舞浜歩であったエピソードが語られました。現在では舞浜歩はもちろんの事、のちの桜Trickでの飯塚ゆずにもつながっているのかと思うと様々なめぐりあわせと、夢を諦めなかった戸田さんには感謝しかありません(唐突に桜Trickの話題ですみません)。

ここまで(Day1、Day2)で感じた部分として、ハネる部分ではしっかりハネたり、自然体のトークを展開したりしていながらも、全体としてかなり丁寧に4周年ライブ、武道館ライブをやっているなと感じていました。どの部分がどう、とは説明しづらいものなのですが、各キャストの皆さんであったり、関係したスタッフらが様々なアイデアを持ち合い、より楽しい、良いライブになるように丁寧に作り上げた物なんだろうなという印象がいつも以上に感じられました。

また、改めて説明すると今回の4thライブは3つのコンセプトを元に結成されたユニットでそのまま実際の3公演を行うというコンセプト型のライブになっているのですが、それにより「Sunshine Theater」、「BlueMoon Theater」というコンセプトに対して合う物をLTFだけでなくLTPからTA曲まで出し惜しみなく突っ込んできたのが、とても良い流れとなって盛り上がれる各公演それぞれの魅力になっていたと思います。3つの方面からそれぞれのコンセプトで魅せつつも、どれもここまで来たミリオンライブの姿を見せている、それが武道館という場所に集まる、というのが素晴らしい出来事だったと感じました。意図的にリーダーのように見えるポジションを排除しているのも、1公演の中でも対等に一人のアイドルである事を感じられるのは、3rdの交代制を経たからこその積み重ねだと思います。

Day3 Starlight Theater (2017年3月12日 (日) 17:00開演)

Day1の太陽、Day2の月に続き、Day3は星の輝きをモチーフにした「Starlight Melody」によるStarlight Theaterです。明るく活発なイメージと純朴さの感じられるDay1、クールなカッコよさとしっとりとした抒情や開放感を感じられるDay2に対し、Day3はミリオンライブのアイドルが持つ可愛さ、カッコよさ、性格、パーソナリティが様々な視点から感じられる内容であったと思います。曲調としてもポップな物からラップ調の物、バラードまで幅広く、アップダウンの激しい公演は確かにそれぞれの星のような輝きを見せる公演でした。

野々原茜役の小笠原早紀さんによる「Heart♡・デイズ・Night☆」は映像として茜ちゃん人形が流れる面白さが有ったり、持ち歌「 ホップ♪ステップ♪レインボウ♪」だけでなく「俠気乱舞」や「Sweet Sweet Soul」のような熱い曲やアガるノリの良いラップ曲まで歌う大神環役の稲川英里さんの多芸さと完成度の高さ、これまでいじょう徳川まつり役の諏訪彩花さんによる「フェスタ・イルミネーション」、「馬場このみ」としての完成度を高めてきた高橋未奈美さんによる「dear…」など、どのソロ曲、ユニット曲も良い魅力が引き出されていました。

ソロで特に印象に残っているのは春日未来役山崎はるかさんによる「素敵なキセキ」、高坂海美役の上田麗奈さんによる「恋愛ロードランナー」ですね。前者は3rd出も感じていた事なのですが、これまでのセンター的ポジションから解き放たれた自由になった感じが更に広がっていて、良い意味で「ミリオンの中の一人のアイドル」になったように感じられました。歌詞を振ってみたと思ったら2番では自分で歌ったりと、見る側としては振り回されている感じが有りながらも、本人としてはどっちも有った方が楽しめるよね!という思考が有ったんだろうな、と思わせるところも春日未来っぽさが有ります。「恋愛ロードランナー」は今までの積み重ねを感じさせるパフォーマンスが、高坂海美らしさを高めるとともに、上田麗奈さん自身の成長も強く感じられました。

ユニット曲ではスコーピオ(雨宮天さん、上田麗奈さん、村川梨衣さん)ら3人による「リフレインキス」はミリオン楽曲の中でもひときわセクシーで、それでいて大人すぎない曲が大きな破壊力を持っていました。Day3開幕からひときわ魅力的な笑顔だった雨宮さんの余裕、めきめき歌唱力が上がっている事を感じられる村川さん、センターとしてまとめあげる上田さんによるユニットはまだまだ可能性が感じられます(今回の星座ユニットはどれも今回限りにせずあと1曲ぐらい聴きたかったです)。

そしてタウラス(山崎はるかさん、諏訪彩花さん、桐谷蝶々)さんによる「メメント?モメント♪ルルルルル☆」。本当に記憶を失っているのか、アイドルが記憶を失ってもそれぞれの持っていた歌を覚えているのか(3人の個人曲タイトルが歌詞に織り込まれています)、記憶を失ったからこそ自分の魅力を再発見しアイドルとして目覚めたのか(シンデレラのアタポン的な)、ループがうんぬん等いろいろ考えようと思えば考えられる歌詞に、そんな事は一切考えずともそもそもアップテンションで前向きで楽しい曲として聴けるとても良い曲なのです。未来、美也、まつりという私得度の高いユニットで、ライブで実際に観る前から3人が小芝居を入れたりわちゃわちゃしてみたり、ステージを駆けまわったりというイメージが有ったのですが、まさしくイメージしていた物を観られてかなり満足しました。

他にもジェミニ(渡部恵子さん、末柄里恵さん、高橋未奈美さん)らによる美しい「永遠の花」、かつてない熱気を見せた「Sweet Sweet Soul」も外せません。

そして稲川英里さん、上田麗奈さん、桐谷蝶々さん、藤井ゆきよさん4人で歌いきった「ジレるハートに火をつけて」です。この曲を歌う”灼熱少女”はリーダーである田中琴葉役の種田梨沙さんが事情により声優として休業中という事も有り4人での歌い出しとなります。まずこの曲が入ってくる事に見る側としても身構えてしまう所は有りましたが、歌っていくうちにこの曲にはサプライズなんてものはない、4人で歌い切るつもりだという事が分かってくると4人それぞれ、特にキャラクターとしての関わり合いが深いだけでなく、中の人としてもミリオン全体の事を考えてくれている藤井ゆきよさんの歌声と表情には揺るぎない覚悟を感じました。琴葉がいつか帰ってきて、5人でのジレハが観られる事を期待して待っていたいです。

全体曲でないものとしては最後の登場となった山崎はるかさん、田所あずささん、Machicoさんによる「君との明日を願うから」。「ゲッサン」にて連載されていたコミックス版ミリオンライブ最後の曲となるこの曲では、コミックス全体でのこれまでの困難、思いのぶつかり合いなどの果てに武道館に立った静香、ともに歌う未来と翼を思い出させます。コミックスでは3人ともにそれぞれの「スタート地点」にたどり着く始まりの物語として、プロデューサーとしてもこれから本当のプロデュースが始まるというような締めくくりとなっており、今回の4thライブそのものの立ち位置としてもかなりリンクしている、最後であり「これから」にふさわしい曲でした。

3日目には新作タイトルとなるアプリゲームの発表だけでなく、新PVの発表も有りました。このPVがまた、どんな周年記念映像になるのかと思ったら最初の効果音は爆発音。ゲーム内での作品である「アイドルヒーローズ」の戦闘が繰り広げられる中、カットカットに原作イラストと同じ構図を入れてくるところも熱いですね。エミリーが無線通信をしているシーンだけで白米が食べられるやつですよ。ミリオンメンバー全員が生き生きと動き、日常のようなパートを展開、オールスターズの面子も登場、最後にはステージでライブと、しみじみとした空気にはならないミリオンらしい楽しい内容でした。でも、Day3はそんなこのPVを見ている時が一番泣けたかもしれません。この3日間かけて各アイドルの良さ、それを大切にし表現する各キャストの良さ、そこで更に曲以外の面での各アイドルの魅力に立ち返るような内容は、明るいながらも感慨深いというか、再発見のような物を感じました。それは、3公演それぞれのコンセプトでのミリオンの魅力の切り取りもそうであり、「ミリオンライブ」の今とこれからを集めたライブだったんだろうなと思います。

4回目の周年ライブ、漠然と念願のようなものに感じ3rdライブでの発表で見える目標となった武道館ライブ、それは確かにこれまでの集大成として良く出来た物で、細かいミスは有れどしっかりしたやり切った感の有る物でしたが、それ以上に「これからの事」を感じ、坂上総合Pの語る「一歩一歩」という言葉、「ありがとう」の次は「ようこそ」でありこれで終わりではないという高木社長の言葉(パンフレットの最後に有ります。今回の公演で「Welcome!!」をやらなかったのも意図した物でしょう)からも、これで完成ではなく、下手したらゲッサンミリオンのように「これからがスタート」まで有るかもしれない、そんな前向きさを感じる公演になったと思います。

新曲「Brand New Theater!」、「Dreaming!」からの3公演全員登場による「Thank You!」は、この武道館のステージも、3公演終わった今となっては狭いと思わせる、まだいろいろな所へ広がっていく印象にもつながっていたと思います。

とはいえ、4年の積み重ねによって出来る事も増えてきた中で、今後どういった物が観られるのか、駆け足の展開にはならないでしょうが、私個人としては疲れない程度に「一歩一歩」をゆったり見ていけたらなと思います。

  

ミリオンライブの面々があのキャラクター、あのキャスト達であって本当に良かった。ありがとう。


CentOS 6 / 7 標準のPHPでも高速化を諦めない

骨董品となって久しい CentOS 6 標準の PHP 5.3、CentOS 7 標準の PHP 5.4 ですが、ディストリビューション自体のサポート期間の長さと、それに伴う PHP 5.3、5.4 の致命的な不具合の概ねのサポート対応によって、「サポート期間の長い標準PHPを使い続ける」という場合も有るのではないでしょうか。PHP 5.5 以降にはphp-opcache (OPCache)という高速化の仕組みが有りますが、CentOS標準のPHPの場合もepel RepositoryからPECL扱いのopcacheが導入できるようです。

※epel Repositoryが有効化されている事

yum install php-pecl-zendopcache

※インストール後はApacheを再起動させたりphp-fpmを再起動したりなど、環境に合わせて適宜反映させる。

特にWordPress等のCMSやフレームワークでは OPCache の有無で大きく速度が変わってきますので、どうしてもディストリビューション標準のPHPを使い続ける事が必要な場合は、検討してみてもいいかもしれません。


ZabbixのデフォルトMySQL監視UserParameterは修正が必要

以下はZabbix 3.0.xでの話です。

Zabbix AgentをZabbix SIAのyum Repositoryから導入すると、
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 内にデフォルトでMySQL監視用ユーザーパラメータが定義されますが、その中のZabbix Pingに関しては修正が必要です。以下がデフォルトの定義です。

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

これをそのままコンソール上で実行すると、MySQL(MariaDB)が起動している状態で実行すると1を返しますが、停止時には0だけでなく標準エラー出力への文字出力が含まれ、データ型が数値ではなくなってしまいます。

$ HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
0

数値として受け取れなくなったアイテムは「不明」の状態となり、トリガーが検知しない状態となります。また、これはトリガーのnodata関数が有った場合でも検知されません。

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping 2>/dev/null | grep -c alive

でエラー出力を捨ててみたり

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping 2>&1 | grep -c alive

でエラー出力も標準出力に吐いてgrepに渡す事でMySQLのダウンを検知する事が出来ます。


既存のPHP 4系WebアプリをCodeIgniter 3.xに乗せ換えた話

PHP 4.xで書かれた歴史有るWebアプリをフルスクラッチせずにPHP 5.6&CodeIgniter 3.xで動くように乗せ換えた話です。具体的なコードというよりも、こうやって進めた、という話になります。

この記事はCodeIgniter Advent Calendar 2016の11日目の記事になります。

現状

  • フレームワーク利用無し。
  • DBとしてPostgreSQL 8.2以前が組み合わされている。
  • ORマッパーとかも無い。
  • register_globals = On で動く前提で作られている。
  • かなりの数がある画面のほとんどのページが数個程度のPHPファイルに纏められている。GETやPOSTの値に機能やページの指定も含まれていて、if文でページを切り替えている。
  • 画面表示はCodeigniterでいうHTMLヘルパーのような、フォームやテーブルを楽に作るためのクラスが用意されていて、その関数を呼んでいる。
  • テストコードなんて無い。
  • ソースコードの文字コードもDBの文字コードもEUC-JP。

なかなか辛そうな感じですが、下手にフレームワークを使われているより、フルスクラッチ的なPHPの方がCodeigniterへの移植相性は良い(と思った)ので移行は出来るだろうと判断しました。

全コードをUTF-8に書き換え

今後の事を考えて文字コードはUTF-8に統一します。EUC-JPのコードをnkfでサクッと書き換えます。htmlspecialcharsしている所を検索し、見つけた1つ1つをUTF-8に対応した形で書き換えます。

PostgreSQL 9.x系への入れ替え

既存のDBの内容はすべてダンプで出力します。ダンプの中身をテキストエディタで開き、文字コードに関連している記述をすべてUTF-8準拠に書き換えます。そしてnkfで実際にUTF-8へと書き換え、PostgreSQL 9.4へ流し込みます。ここは意外と問題になりませんでした。

ここで処理上の問題になるのはキャストの仕様変更になります。

キャストを追加してバージョン互換性を保つには
http://lets.postgresql.jp/documents/tutorial/cast/

PostgreSQL 8.3 では型変換のチェックが厳密になるよう仕様変更されました。特に文字列型への暗黙の型変換が無くなったため、以前のバージョンで動作していたアプリケーションであっても 8.3 上ではエラーが発生するかもしれません。

これがもろに該当しSQL実行時にエラーになるのですが、今はまだ修正しません。

PHP 5.6への入れ替え

先のOS入れ替えの時点でremiレポジトリからPHP 5.6を導入しています、ので、アプリが正常に動かない状態ではありますが、PHP 5.6で動作する環境となっています。

試しに動かしてみる

全然動きません。ここからひたすら修正していく作業になります。

静的解析と実際に動かして出るエラーをひたすら潰していく

Eclipse+PDTで作業しています。世間的にはPhpStormな潮流となっていますが、こういう元々動かないようなコードをPhpStormに放り込むとエラー数がすごい事になるので、PDTが静的解析する分が丁度よかったりします(PhpStormでも解析する範囲は調整できるのですが)。これは体感的な物なので実際はどちらでもいいでしょう。ただ、静的解析の無いテキストエディタでのコーディングはお勧めできません。

ここでIDEによる静的解析でエラーになっている物、ワーニングになっている物をひたすら修正していきます。例えば、元のコードでは連想配列を使用する際にほとんどの添え字がシングルクォーテーションで囲まれていなかったりしました。連想配列は相当な数が使用されているので、これが一番作業としてつらかったですね……。

register_globalsに関してはオンにしてはいけない、というかPHP5.6ではそもそも使用不可なので、各ファイルの先頭に全てのGETとPOSTを変数に展開するコードを一時しのぎで書いています。

foreach ($_POST as $post_name => $post_value) {
    if (isset($$post_name)) {
        continue;
    }
    $$post_name = $post_value;
}
foreach ($_GET as $get_name => $get_value) {
    if (isset($$get_name)) {
        continue;
    }
    $$get_name = $get_value;
}

PostgreSQLのキャストで問題になるエラーも、実際に動かしてみながらエラーが出る個所を潰していきます。一か所エラーが見つかれば、そのカラムを扱うところすべてが怪しいので、コード全体をカラム名で検索し該当箇所をまとめて修正します。

とりあえずPHP 5.6とPostgreSQL 9.4で動くようになった

実はまだバグが残っていたりしますが、機能として重要な部分は正常に動作する状態ですので、他は見つけ次第随時潰していく、という対応を取りました。何かしらフレームワークが使われていたらフレームワークまで含んだコード量やフレームワークのメンテナンス状態、それを入れ替えるための仕様変更部分もろもろの理由で諦めていたかもしれませんが、フルスクラッチなのでひたすらバグを潰していくだけで移行が出来ました。

CodeIgniterへの入れ替え

やっとCodeIgniterの話になります。既にPHP 5.6で動く状態ですので処理の移植は結構楽です。ちなみにここからIDEをPhpStormに切り替えています。

コントローラの作成

既存のアプリはGETとPOSTの値だけで複数のページを実装していましたが、素直に

/分類A/insert
/分類A/edit/xxx
/分類A/detail/xxx
/分類B etc…

というような形で動くコントローラに作り替えました。分類部分がコントローラのクラス、insertやedit、detailの部分がコントローラ内のメソッドになります。既存のWebアプリとはここでURLの互換性が一旦なくなります。コントローラでルーティングした後は、すぐにモデルに渡してしまう形にします。

モデルの作成

GETとPOSTで振り分けていた処理ブロックの中身をモデル、モデル内のメソッドに分割していきます。つまり元の処理をひたすらコピペをしていくような作業になります。また、register_globalsや先のregister_globals一時しのぎ処理で作られた変数については、$this->input->get() や $this->input->post() から取得するようにします。

SQL実行部分に関しては、組み立てたSQLをPHPのPostgreSQL関数ではなく、CodeIgniterのSQL実行関数 $this->db->query() に渡すようにします。SQLのエスケープ処理もCodeIgniterの標準エスケープ関数 $this->db->escape() に切り替えました。実行結果は元の実装が連想配列前提でしたので、 $query->result_array() で取り出します。DBアクセスに独自の仕組みではなくSQL文スクラッチのような形でも特に問題にならないのは、CodeIgniterへの移植のしやすさとして大きい部分だと感じます。

共通処理的なコードは適宜、メソッドでまとめるなり、(CodeIgniterでいう)ライブラリを追加するなりしました。

ビューの作成

今回はTwigを使用しました。CodeIgniterで使える形のTwigは @kenji_s 様の「CodeIgniter Simple and Secure Twig」が利用できます。
http://blog.a-way-out.net/blog/2015/05/25/codeigniter-twig/

元々の実装に有ったHTMLヘルパー的クラスは用意せず、シンプルにTwigを使ったテンプレートを作成していきました。

デザイン的にはUIフレームワークとして Bootstrap 3.x を利用するようにしました。そのため各UI部品、Webアプリ全体のデザインについてはあまり時間をかけずに現代的な物になりました。元々のWebアプリではフレームでメニューを表示していましたが、ヘッダーにメニューバー(navbar)を設ける形に作り替えました。

URL互換性レイヤー

なんてたいそうな名前を付けていますが、元のWebアプリとのURL互換性を取るためのレイヤーをCodeIgniterのコントローラとして作成します。

例としてURLが
/?function=機能A&page=detail&code=xxx
のようなものが来たら、GETとPOSTの値で判断し、
/機能A/detail/xxx
のURLにリダイレクトさせます。

public function functionA() {
    $get_arr = $this->input->get();
    // 機能A
    if (!empty($get_arr['functionA']) && !empty($get_arr['detail']) && !empty($get_arr['code'])) {
        redirect($url_base . '/FunctionA/detail/' . $get_arr['code'] . '/');
    }
}

この互換性コントローラの呼び出しは
application/config/routes.php
のルーティング設定に定義します。URLには都合よく旧アプリにしか含まれない文字列が有りましたので、

$route['文字列A:any'] = 'compatiblelayer/functionA';
$route['文字列B:any'] = 'compatiblelayer/functionB';

のように振り分けます。

基本的には新しいURLを使ってほしいですが、既存の資料なりブックマークなりで古いURLを持っていたしても、これを用意しておく事でURL互換性が保たれます。

所感

文量にも表れていますが、既存のコードをPHP 5.6で動かした場合にバグとなる部分を修正する作業が一番重いです。ただ、それを乗り越えると既存のフルスクラッチコードは簡単にCodeIgniterのコントローラ、モデル、ビューに分割していく事が可能でした。またDBアクセス部分に関しても、旧来のSQL組み立てロジック、PHPが標準で備える関数での実行、結果を連想配列として扱う処理がそのままに近い形で移行できます。どちらもCodeIgniterが独自の作法を極力持たない、フルスクラッチに近い感覚で書けるという良さが移植においても現れた物かと思います。太古のPHPアプリが有れば、その近代化の選択肢としてCodeIgniter 3.x 、いかがでしょうか?