アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

CodeIgniter入門 #2:軽く改造してみる

CodeIgniter入門シリーズ カテゴリーの記事一覧 - アナログCPU:5108843109

今回やること

  • デフォルトのディレクトリ構造を変えてみる
  • データベースに接続する

ドキュメントルートのダイエット

やっぱドキュメントルート以下に丸々入ってるのが気持ち悪いので外に出しておくことにしました。

ドキュメントルート用のディレクトリを用意して、そこにindex.php.htaccessを移動させます。
名前は何でも良いのですが、個人的に使っているさくらサーバーがwwwなのでそうしておきます。
で、wwwと同じ階層にcodeigniterディレクトリを作り、そっちにapplicationとsystemを移動させました。

こういう感じです。構造も好みでOK。

こうしておけば外部からはwww以下しかアクセスされないので、
applicationやsystemディレクトリ以下のアクセス対策用index.htmlは消しても差支えないと思います。

で、移動したindex.phpの中にapplicationディレクトリやsystemディレクトリへのパスが書かれているので、そこを直します。
今回の例だと以下のような感じ。

$system_path = '../codeigniter/system';
$application_folder = '../codeigniter/application';

また、XAMPPのhttpd.confなども必要に応じて書き換えておきます。

アクセスを試してみて動けばOK。

いらないディレクトリとファイルを消す

codeigniter(=application, system), www以外のディレクトリやファイルは全て削除しても大丈夫…かもしれません。
とりあえず動きました。
不安なら残しておくなり別のところに退避させておくなり。最悪またダウンロードしてこればOKだと思います。

前項で書いた通り、ドキュメントルート外のindex.htmlもごっそり消して問題なさそうです。
わざわざ消すほどでもないかもしれませんが、なかなか鬱陶しいし…。

あとはapplication以下に空のディレクトリが多いけど何なんだろう。消してもいいのかな。
気になるけどとりあえず残しておきます。

データベースの接続設定をする

データベースとユーザーを用意します。(省略)
今回はMySQLlocalhost内に「sandbox」データベースと「user」ユーザー、「pass」というパスワード…ということにします。

codeigniter/application/config/database.php 内の設定を変更します。

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => '',
	'password' => '',
	'database' => '',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

変更点を抜粋するとこんな感じです。

	'username' => 'user',
	'password' => 'pass',
	'database' => 'sandbox',
	'char_set' => 'utf8mb4',
	'dbcollat' => 'utf8mb4_general_ci',
);

接続できたかどうか確認するには、コントローラ内の適当なメソッド内(もちろんview呼び出しより前)に以下を追記してアクセスしてみます。

$this->load->database('default');

「追記前と何も変わらなければ」とりあえずOKです。
試しにユーザー名やデータベース名などを存在しないものに変えてリロードしてみてエラーになれば尚良しです。

参考資料
データベースへの接続 — CodeIgniter 3.2.0-dev ドキュメント

CodeIgniter入門 #1:Hello CodeIgniter World!!!

※「CodeIgniter入門する人向け記事」じゃなくて「自分がCodeIgniter入門してみた記事」です

CodeIgniter入門シリーズ カテゴリーの記事一覧 - アナログCPU:5108843109

仕事でCodeIgniter触ることになり自分でなんか作った方が理解早そうだなと思って、なんかやってみる。
あとPhalconほどじゃないけど名前がかっこいいし、高速で軽量で自由度が高いということで。
とりあえずHelloWorldまでやってみます。

CodeIgniter へようこそ — CodeIgniter 3.2.0-dev ドキュメント


開発環境はWindows、サーバーはLinuxの想定です。
まあXAMPPで動かすだけなんですけど。

今回やること

  • CodeIgniterのダウンロード
  • HelloWorld(サンプルページの改造から新規ページ追加まで)

CodeIgniterのダウンロード

以下からzipをダウンロードして展開します。
www.codeigniter.com

ちなみに今回ダウンロードしたのは3.1.10でした。

中身を見てみる

こんな構成でした。

  • application
  • system
  • user_guide
  • index.php
  • …などなど


えっ…これさあ…
もしかしてここがドキュメントルートになるの??自由すぎない???

applicationとかsystemとかのディレクトリを覗いてみると、
以下全ディレクトリに「403だよ」って表示するだけのindex.htmlが設置されている…。
まじかよ…。
じゃあドキュメントルートの下に置かなきゃいいじゃん、と思いましたが、ひとまずこの形で進めてみます。
(ちなみに仕事で触るプロジェクトはapplicationとsystemを外に移してました。せやろな)

ローカルで動かしてみる

きっとサンプルページ的なものは最初から出るだろうと踏んで、ダウンロードしたファイルには一切手を加えず適当なところに設置。
英語アレルギーに耐えつつreadmeを見てみるとPHP5.6以上ということだったので、適切なXAMPPを選ぶ。
httpd.confとhostsを編集してXAMPPを起動してアクセス。

f:id:honey8823:20190618130921p:plain

えー…

えーと…

このページのviewは application/views/welcome_message.php で、
controllerは application/controllers/Welcome.php だよ、ってことですかね。

とりあえず動いたっぽいので良し。

HelloWorldしてみる

じゃあ、ここを差し替えてHelloWorldしてみます。

その1:viewを書き換えてみる

application/views/welcome_message.php の内容を適当にいじってからリロード。
無事反映されました。まあそりゃそうなんですけど、確かにここに紐づいてますよということで。

元に戻します。

その2:別のviewを呼んでみる

application/views/welcome_message.php を複製して、HelloWorld仕様に適当に書き換えます。
ここでは hello_world.php としました。
それから application/controllers/Welcome.php から複製したviewを呼ぶよう変更。

public function index()
{
	// $this->load->view('welcome_message'); // これをコメントアウトして
	$this->load->view('hello_world'); // こうじゃ
}

それからリロードすると無事反映されました。
Welcome.php も元に戻します。

その3:別のcontrollerを呼んでみる

次は application/controllers/Welcome.php も複製して、HelloWorld仕様に書き換えます。
ここでは HelloWorld.php としました。
(書き換え内容はその2と同じ)

じゃあこれをどこから呼ぶんだ、と探してみた結果、
application/config/routes.php でした。

// $route['default_controller'] = 'welcome'; // これをコメントアウトして
$route['default_controller'] = 'helloworld'; // こうじゃ

こうやってwelcomeを呼んでいるのをhelloworldに書き換えてリロード。
無事反映されました。

routes.php ももとに戻します。

その4:新しくページを作る

さっきからトップページを書き換えているだけなので、今度は新しくページを作ってみます。

長くなるので結論だけ書くと、以下2つの手順でいけました。

① config/config.php の調整

// $config['index_page'] = 'index.php'; // このindex.phpを
$config['index_page'] = ''; // 消す

②ルートディレクトリ(index.phpと同じ階層)に、下記内容の .htaccess を設置

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

この調整をしてから /helloworld/ にアクセスすると無事に表示されました!

ちなみに、controllerに hoge メソッドを追加すると、/helloworld/hoge/ でアクセスできます。

おしまい

無事にHelloWorldできましたのでとりあえず今回はここまで!

蛇足:ルーティングについて

> 長くなるので結論だけ書くと
と書きましたが、その部分の補足を。

まあ新しいページ追加するつってもルーティングをなんとかすればいけるっしょ、とユーザーガイドを見てみました。
URI ルーティング — CodeIgniter 3.2.0-dev ドキュメント

URI のセグメントは通常、つぎのパターンに従います:

example.com/class/function/id/

お、もしかして設定いらない? と思って /hellowold/ にアクセスしてみるものの、404。

じゃあ一応設定してみる?と思って

$route['helloworld'] = 'helloworld';

としてみましたが、まだ404。

軽くぐぐってみると同じような?症状の人を発見。未解決だけど。
PHP - CodeigniterでURIルーティングがうまく動作しない。|teratail

(私のサーバーのドメイン)/index.php/users/list/でアクセスできた

なんじゃそりゃ、と思いつつ /index.php/helloworld/ にアクセスしてみると確かに正常に表示された。
なんじゃそりゃ。

もうちょっとユーザーガイドを見てみるとこんなページを発見。
CodeIgniter の URL — CodeIgniter 3.2.0-dev ドキュメント

デフォルトでは index.php ファイルは URL に含まれます

…?
???
え、なんで?

なんでかは分かりませんが、↓も参考にしつつ先に書いた方法で解決しました。
CodeIgniter 3でURLに付加されるindex.phpを外したい(取り除きたい) | onocom

別々の設定を持ったChromeを同時に起動する

今いる作業場所、何故かChromeのプライベートモードが使えないよう制限されていて、
いろんなアカウントを使い分けるようなテストでちょっと困るので
cookieなど無駄に汚したくないし後から全リセットするのもヤダヤダ)
調べてみたところ、普通のChromeを複数同時に起動する方法がありました。

手順は以下の通り。

  • 任意の場所に、Chromeのデータを保存するためのディレクトリを作っておく
  • Chromeのショートカットを好きなところに作る
    • もちろん、今使っているものとは別のショートカット
    • 名前は好きに変更してどうぞ
  • 作ったショートカットを右クリック>プロパティ で、「リンク先」のところに以下を追記する
    • --user-data-dir=さっき作ったディレクトリのフルパス
    • 「OK」で保存して完了

リンク先のところは要するにこんな感じになります。

"C:\ ... \chrome.exe" --user-data-dir=C:\chromedata_1

この方法で、好きなだけ別々のChromeを量産できます。
作ったショートカットから起動してみると、まっさらの状態のChromeが出てきます。
プライベートモードとは違って、こっちはこっちで「普通」に使えるのが利点になり得ます。
例えば
「仕事用と個人用」とか、
「同時に別々のアカウントでひとつのウェブサービスにログインしたい」とか。
リセットしたけりゃフォルダを空にすればいいし、
いらなくなったらショートカットとフォルダを消してスッキリ、という寸法です。

体調不良で会社を休むときの報告

朝起きて体調が悪いとき。
もしくはぶっちゃけ寝坊したけどそのまま休みたいので体調不良という設定にするとき。
ふつうの会社であれば連絡を入れて休みをもらう、という流れになると思います。

連絡方法は会社によりけりですね。
最初に勤めた会社では直属の上司に電話連絡、
前の会社や今の会社では全社ML宛にメール。
最初の会社や今の会社は有休扱いになるのでその後サイ○ウズ的なやつで有休申請。

唐突に「今日休みます」だけの内容もちょっとアレだなという感覚はあるので
「今日は体調不良で休みます」とするのにはそんなに抵抗はないんですが、
最初の会社と前の会社では症状の報告も求められました。

…何故?

頭痛か腹痛か聞いてどうするんですかね?
ノロやインフルエンザなどの「感染症かどうか」は大事だと思いますが、
病院でもないのに「症状」を聞く意味って??
プライベートな内容にも程があると思うんですけど…。

しかも一対一の電話報告内だけならともかく、
偉い人たち全員宛の有休申請とか全社宛のメールでって。
なんで自分の弱みを知らせて回らなきゃいけないんだって感じ。
あと極端な話「生理痛が重いので」とか全方位に言って回るの嫌じゃないですか。
(特に自分の場合は技術者ということでどこ行っても男性多数の環境なので。女性同士だと気にならないのかな?)
(まあ実際問題としてはみんなせいぜい「腹痛」くらいにしか報告しないだろうけど、一定周期ごとに腹痛で休む人がいると結局「あっ…(察し)」ってなるよね)
つーか見る方としても朝から「嘔吐」「下痢」系のやつとか目にしたくないし。

前の会社を擁護するとすれば、当日の体調不良は有休ではなく欠勤扱いだったので、有休と違って理由を聞くこと自体はOKだと思います。全社宛に症状を報告というのがアレなだけで。

ということで最終的に、そういうデリカシーのない会社には何でもかんでも「頭痛」と報告するようになりました。
頭痛なら出勤しても仕事にならんし、言っても言われても不快には思いにくい症状だし、市販薬が効かないケースもまあまああるし、病院行っても原因が分からないことも多いし、プライバシー的にアレな部分にも踏み込まれにくいし。あと元々が頭痛持ちだし。

…という仮病みたいな対応策を取ることになる以上、やっぱり症状を詳しく聞く意味はないと思うんですけどねー。

<追記>
2021年3月現在、新型コロナウイルスが広がり1年以上過ぎました。
さすがにこの状況下では症状の虚偽報告するのもアレなので、体調不良がある場合は正直に申告しましょう…。
あと、多少の体調不良でもできれば病院に行きましょう…。ただの軽い頭痛と思ったらコロナだった、という知人もいました…。
仮病の難易度が上がりましたねえ。熱があるとか言っちゃうと大ごとになるので、「めちゃめちゃ歯が痛い」とかのマジで関係なさそうな症状じゃないと。
</追記>

パスを通す(環境変数の設定)

たまーに発生する作業ですが、毎回忘れて調べているのでメモ。

環境変数の設定画面を開く

左下の田をクリック後「環境変数」とか入力してやれば出てきます。
最近のWindowsはこういうところ便利で好き。

f:id:honey8823:20190607141904p:plain

「システムのプロパティ」が開いたら「環境変数」をクリック。

f:id:honey8823:20190607141906p:plain

設定を追加する

出てきたウインドウで「Path」を選んで「編集」。
さらに出てきたウインドウで「新規」をクリックすると入力欄が出てくるので、
そこに追加したいパスを入力すればOK。

f:id:honey8823:20190607141909p:plain

XAMPPを複数インストールして使い分ける

XAMPPを使ってローカルで環境構築する際、PHPのみダウングレードしたく
以前試した方法(最新のXAMPPに対しPHPのみ置き換える)でやってみたのですがうまくいかず…。

仕方ないので、今回は単純に古いXAMPPをインストールしました。
でも今後新しいPHPを使うこともあるかも、と思い試しにXAMPPを複数インストールしてみたら無事成功しました。

まず、古いXAMPPのインストーラはこちらからダウンロードできます。
sourceforge.net

インストール中、インストール先のディレクトリを選択するところがありますので
そこで任意の異なるディレクトリを指定するだけでOKです。
バージョン名を付けたディレクトリを用意すると分かりやすいと思います。

hostsファイルをすぐ開くバッチを作る

いや、もっとスマートな方法がありそうですけど。

以下内容のバッチファイルを作成して好きなところに置いておくと、あとはダブルクリックで開けます。

cd C:\WINDOWS\system32\drivers\etc
notepad hosts

「管理者として実行」じゃないとダメかな?と思ったら普通に開いても変更・保存できる…。なんでだろ。

とりあえずローカルでWordPressを動かしてみる

Windowsでxampp使って動かしてみます。

xamppをインストールして使える状態にする

本筋と違うので省略。
たぶんPHPMySQLが動けばOK。

WordPress(zip版)をダウンロードして解凍する

以下からzip版をダウンロードし、解凍します。
https://ja.wordpress.org/download/

解凍後はお好みの場所に設置します。
xamppやhostsの設定ができるなら設置した上で設定を行い、
設定できない・したくないならxamppのルートディレクトリに置きます。

設定方法は前に書いたことがあるので貼っておきます。
複数プロジェクトの開発環境構築 - アナログCPU:5108843109

使用するデータベースと、そのDBに対して全権限を持つユーザーを用意する

こんな感じで。
phpMyAdminとか使うなら、ユーザー作成時に「同名のデータベースを作成してすべての特権を与える」にチェックを入れるだけでOKですが、作成したデータベースの照合順序には注意)

CREATE USER 'test_wp'@'localhost'
IDENTIFIED BY 'testpass';

GRANT USAGE ON *.* TO 'test_wp'@'localhost'
REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

CREATE DATABASE IF NOT EXISTS `test_wp`;
GRANT ALL PRIVILEGES ON `test\_wp`.* TO 'test_wp'@'localhost';

ALTER DATABASE `test_wp` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;

データベースの情報をWordPressに設定

解凍したWordPressディレクトリの中にある「wp-config-sample.php」を複製し、「wp-config.php」にリネームします。

リネームしたら、テキストエディタWindows標準のメモ帳はNG)で必要な部分を編集します。

define('DB_NAME', 'test_wp');      // DB名
define('DB_USER', 'test_wp');      // ユーザ名
define('DB_PASSWORD', 'testpass'); // パスワード
define('DB_HOST', 'localhost');    // サーバ(今回はローカルなのでlocalhost)
define('DB_CHARSET', 'utf8mb4');   // 文字セット

// 以下はユニーク値であれば何でもOK?
// https://api.wordpress.org/secret-key/1.1/salt/ で自動生成してコピペするのが早い
define('AUTH_KEY',         '?.Pf3]H-SFj9G3...');
define('SECURE_AUTH_KEY',  'Oyb-?x|s[H8v#T...');
define('LOGGED_IN_KEY',    'jK%+*2~$;;<HBw...');
define('NONCE_KEY',        'a62P|l?5v%N^l0...');
define('AUTH_SALT',        'ED~c+EzNPt|jl/...');
define('SECURE_AUTH_SALT', '0VM/Ba{O,l1q+h...');
define('LOGGED_IN_SALT',   'F~Cy$H*Je[6v7-...');
define('NONCE_SALT',       '>XF[la.LJGOu?k...');

インストールする

/wp-admin/install.php にアクセスします。

自分の場合は

http://testwp.localhost/wp-admin/install.php

でした。

アクセスすると以下のようなフォームが表示されますので、
必要事項を入力し「WordPressをインストール」を押せば完了。

f:id:honey8823:20190412122740p:plain

ここで、パスワードが脆弱だと先に進めません。
ローカル環境だから晒すけど
「hogehogefoo」だとダメで
「hogehogefooo」だと普通になり(これなら登録OK)
「hogehogefooooo1234」は強力と言ってくれるのでこれで登録しました。
「hogehogefoo1234」も普通だそうです。
単純な文字数や種類だけでなく、一般的な単語かどうかなども見ているようで
「applicatio」はOKなのに「application」はNGでした。

また、「後から変えられますよ!」みたいなこと書いてますけど、ユーザー名は変えられませんでした。なんでや。(アカウント追加はできるのでどうしてもという時は乗り換えられるけど…)

表示確認する

「/wp-admin/」で管理画面、「/」で表側の画面が確認できます。
これでとりあえず動かしてみる段階まで完了です。

既存メールアドレスでgoogleアカウントを使えるようにする

これ常識なのかしら…

会社のメールアドレスでgoogleアカウントを使いたい、ということもままあるのですが
今までは設定された状態で入社して「これ使ってね」か、もしくはgoogle禁止だったのでしらなかった。

googleアカウント作るときに「代わりに現在のメールアドレスを使用」をクリックすると
そこにアドレスを入れられるようになるので、そのまま画面の指示に従って手続きを進めるだけ。以上。
f:id:honey8823:20190228155854p:plain

メールそのものをgmailで使うには更に設定とか必要だと思いますが、
スプレッドシートやらドライブやらを使うならこれだけで充分。

Twitterのタイムラインを設置する

↓こういうやつ。意外と簡単でした。

作り方

公式でツールを用意してくれています。
これに従って進めて、出来上がったHTMLを貼り付けるだけ。

詳しい使い方はヘルプページにあります。
タイムラインを埋め込む方法

補足

…とだけ書くのも何なので。

指定ユーザーのツイートだけでなく、
特定のツイートのみ・リスト・モーメント・ハッシュタグ…など、いろいろな指定が可能です。
最初のURL入力時にもこのようにサジェストしてくれます。
f:id:honey8823:20190222120057p:plain

また、URLと表示形式を指定するだけで完成しますが、少しだけデザインを調整できます。
f:id:honey8823:20190222121101p:plain
①をクリックで調整画面が出てきます。(②で完成したHTMLをコピーできます)

この調整では横幅縦幅をpx指定する必要がありますが、
後からHTMLを直接いじればパーセンテージだろうがemだろうが好きにできますので、
そういう調整をしたい場合はとりあえず適当な値を入れればOKです。
ただ注意が必要なのは、横幅に応じてツイートの文字サイズが変わること。
おそらくjsやcssなど駆使すれば調整は可能ですが…