CodeIgniter3 migrationの話をば。

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 12日目です!
https://qiita.com/advent-calendar/2017/code_igniter

この記事は、CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)の記事の補足です。

Migrationについて

本家ユーザーガイド :
https://www.codeigniter.com/user_guide/libraries/migration.html

CodeIgniterでもMigrationを使ってテーブル定義の管理をすることができます。
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)では、チュートリアルで触れられていないため記載しませんでしたが、使うと便利です。
この機能は2の頃にはすでにあったのですがあまり知られていません。
CodeIgniterがシンプルで、たくさんの機能を実装していないという印象からではないかと思います。

設定

application/config/migration.php の編集
migrationを使用可能にして、
migrationのファイルを保存するフォルダを指定して
migrationのファイルをつくるのにtimestamp使いますを指定します。YYYYMMDDHHIISS フォーマットなので、(e.g. 20171213100537) です。
マイグレーションのバージョンは自動で最新にしといてね設定もfalseになっているのをtrueに変更です。

フォルダを作りましょ

migrationファイルの作成

ファイルができていることを確認

これから作るmigrationのバージョンは、 20171213114048 になりました。

ユーザーガイドに従って書くとこんな感じです。
もうすでに皆様もPHP7環境だと思うのでarray()は[]にしちゃっていいと思います。

Migrate Controller Classの作成

application/controllers/Migrate.php

ドキュメントのサンプルコードはこんな感じで不親切です….。
application/config/migration.php の $config[‘migration_version’] = 0; のところを、実行する最終のバージョン番号を設定せねば動きません….
最新の状態にするのであれば、$this->migration->latest()を使うと良いです。
application/controllers/Migrate.php

migrationの実行と結果/h2>
migrationを実行します。

実行された結果を見てみます

newsテーブルと、migrationsテーブルができています。

Migrate Controllerにロールバックを追加してみる

Migrate Controllerにロールバックを追加しました。
またhttp(s)越しに、外部から叩かれないように、

コマンドの実行

20171213114048_add_news.phpの状態に戻ります。
まだ1つのバージョンしかないのでこれしか指定できなかったわけですが、これもやり直したい場合ありますよね?

エラーを吐いてしまいますが、これでnewsテーブルがdropされます。
これはもうちょっとうまい方法が欲しい…..エラーが発生しない方法に寄せたい….ですが今日のところはこれで0地点に戻りますということにします。

やっぱりSQLで書きたいやん?

20171213114048_add_news.php の upメソッドはこんな感じになります。

migrationはsqlそのままで行きたいかどうかは好みが別れるかと思います。
MySQLを使っての設計と実装の場合、mysqlWorkBenchを使う場合も多いでしょうし、そうするとツールからcreate table文は自動抽出でしょうし、sqlの方が便利だと思うんだよねー。

さてと、チュートリアルに戻りましょうか!!!

microbitのFacebookグループのご紹介

micro:bitと出会いまして、勢いで作ったグループです。
勉強会でデモを見て、これはすごい!!!って思って、
これはやらねばと思った翌日にmicro:bitを購入しました。
初心者な私ですがもっといろいろお話を聞けたり、教えていただいたりできるといいなと思い、その勢いで作ったのでした。
もしよろしければ、ぜひご参加ください。

https://www.facebook.com/groups/361910434253502/

CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 8日目です!
https://qiita.com/advent-calendar/2017/code_igniter

9日目の記事はayatoさんによる
Dockerで作るCodeIgniterローカル開発環境 入門編でした!
まだ読めてない人はぜひ読んでほしいです☆☆☆

CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)って事で(2)なので(1)があります!
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1) の続きです。

チュートリアルの場所
本家(英語): https://www.codeigniter.com/user_guide/tutorial/index.html
ユーザー会(日本語): http://codeigniter.jp/user_guide/3/tutorial/index.html
@NEKOGET(日本語?): http://pneskin2.nekoget.com/codeigniter/3/user_guide/tutorial/index.html

今回も本家のチュートリアルを見ていきますね。

今回のお題は「ニュースを見る機能を作ろうぜ」 です
https://www.codeigniter.com/user_guide/tutorial/news_section.html

newsを保存しておくtableはこんな感じ。
個人的な好みで言えばここに新規登録日を追加したいところです。

環境の準備 : database

modelをつくる….. 前にDatabase用意しないとダメですね。
database名どうしましょう?

ci3_tutorial とでもしましょうか?

mysqlが入ってる事を確認。

mysqlの起動
mysqlのユーザーとパスワードを作成
databaseの作成
って感じですかね…

それからapplication/config/config.phpの編集です。

よしよし入ってる。
しかし起動してない。

起動してみる。

案の定rootにパスワードがないわコラって怒られる。

パスワードの設定

mysqlに接続
途中パスワードを聞かれるので上記で設定したパスワードを入力

文字コードの確認

utf8にしとく方が楽よねって事で、一旦mysql接続を解除して /etc/my.cnfを編集
まぁここら辺も含めてansibleに書いてし待った方がいいんだけども……
知っててほしいなあという気持ちもあり難しいね。

[mysqld] に serverがutf8ですよを追記

[client]セクションを追加。utf8dですよを記載

mysqlを再起動

mysqlに接続して文字コードを確認する。

filesystemはbinaryでいいよね。
他がutf8になった事を確認。

データベースの作成

データベースができてる事を確認する。

newsテーブル作ろうかw

テーブルができた事を確認する。

データベースの準備ができた!

config.phpの変更

次は設定だねー
DBに接続する設定書いておかないとダメだよねー
configの設定についてはなぜかチュートリアルにないんだよね。不思議だねー

application/database.php

‘username’
‘password’
‘database’
‘dbdriver’
の4項目を変更したよ。
postgresqlを使う場合は、’dbdriver’ は postgre だよ!

ルーティングの設定

チュートリアルには最後の項目で書かれてるんだけど、これ設定してないとブラウザ越しに見えないので先に設定しちゃおうか☆
CodeIgniter/application/config/routes.php

これはどういう設定かわかるよね?
news/ はNews Classのindex()が処理をする。
news/view/{何か文字列} は News Classのviewメソッドが引数を持って処理する
その他は、 Pages Classのviewメソッドが処理をする
って流れだね。

Modelの作成

まずはモデルの作成だね!
application/models/News.php
Codeigniter3からModelはClassなのでファイル名の最初の1文字目は大文字だよ!

あんまり好きじゃない書き方だけども、Modelのコードね。
slugが指定されてなければ全件をretunしてる。
slugが指定されている場合は、検索した結果を1件だけ返してるコードだね。
できればlimitの設定とorder by は指定したいところだね。

Controllerの作成

次はコントローラー
これも最初の1文字目は大文字だ。合算するとこれぐらいだよね。

チュートリアルのコードはこんな感じになるかな?

Viewの作成

チュートリアルをみるとviewをどう書くのかがすごく雑だね…..
ここで必要なviewは
application/views/templates/header.php
application/views/templates/footer.php
news一覧を表示させるための
application/views/news/index.php
application/views/news/view.php

この4ファイルになるね。!

application/views/templates/header.php

application/views/templates/footer.php

application/views/news/index.php
index.phpは一覧を表示するよ!

http://{EC2のインスタンスのURL}/news

まぁ、そうだよね。
表示されるのはタイトルだけだね。
だってまだ表示する記事ないんだもの。
mysqlに接続して、記事でーたを登録してみるね!

1件登録して見たよ。

http://{EC2のインスタンスのURL}/news へアクセス。

記事が1県表示されたね!!!

次にviewへアクセス
http://{EC2のインスタンスのURL}/news/first_message

表示されたかな???

次は [ニュースを登録する機能を作ろうぜ] を(3)って事で続きを記事に書こうと思うよ!!!

< 随時更新中>今日はAngular5を触ってみる。

今日はAunglarJSを触ってみるよ。
最新のバージョンは5らしい
私の知ってるAunlerさんは1だったような2だったような気がするので、すくすくと育ったんだろうね。

javascriptを勉強したての頃、prototype.jsが流行ってて、jQueryはまだなかった。
bootstrapもまだなかったんだ。
ちょっとだけは書けてたはずなんだけど
prototype.jsをやってみようと思ってやり始めたんだけど
やりたいことに対してちゃんと手が届いている、コントロールできている感じがしなくて
結局javascriptの基礎から勉強し直したのを覚えている。
まだ全くjavascriptを書いたことがない、ちょっとライブラリを使ってWebページを快適にしたりしたりはしてたよってところからのjavascriptフレームワークへのジャンプはちょっと早くて、多分間に何か必要なんだけども今の私だとそれが何かは思い浮かばない。モヤモヤしちゃってる。

ま、とりあえずチュートリアル行っとこうかな。

Angularさんの公式サイト
https://angular.io/

quick Start
javascriptの良いところはブラウザがあればコードを楽しめたところだったと思うんだけど、nodeのinstallからスタートっぽい。

npmも動かないと思ってたけど、そこは動いた。
ってことはnodeインストールしてあったのかと驚くぐらいには触ってなかったnode
そらまぁそうだよねっていうエラーが表示された。

このMac miniって、brewで入れてたっけかな?

….. ああ、はいはい、そうだね。
途中バージョンアップしたりOSもアップブレードしたわけで、いつものそれやらないと仕事しませんってやつですね。
ターミナルでこれやるのすごくめんどくさいのでXCodeを立ち上げて対応。

今最新のhomebrewっていくつなんだろう?
普段はMBPで作業するのでMac miniの環境は古くなりがちだ…
そろそろMac miniも新しいのに変えたいなぁ。
Late 2012 だもん。
もう十分仕事してくれたと思うんだよね。

ターミナルが固まったか?って思うぐらいに無反応…
しばし休憩 (11:49)
動き出したらするっと終わった(12:05)
長かったなー
upgradeもしとこうか。

$ brew upgrade –all

しばし休憩 (12:07)
Errorで止まる….(12:19)

はいはい、Javaが必要になったのね。入れとく入れとく。
cast installしてあったのはvagrantとvirtualbox
まだまだ使うと思うしね。

再度実行
以前はこういうのちゃんと書いてたよなぁ。
すんごい久しぶりに書いてるなぁと思いながら作業作業。
なかなかAngular5にたどり着かないなぁ…(トオイメ)

$ brew upgrade –all


ちょっと捨てたくなってきた。

nodeだけでいいね

終わった。

そして最後にclean up

お掃除大事だね!

んじゃ気を取り直して

入ったねー

んじゃ新しいプロジェクトの作成

added 1149 packages ってすごいなぁ。
物量凄まじい。
人間が手作業とかちょっと無理よな。 1149 packages

自動でsafariで http://localhost:4200 にアクセスして画面が表示されました。

(12:52)

src/app/app.component.ts を編集

title = ‘My Fist Angular App’; に変更。
safariの画面が自動でreloadされた。
もうここまでの環境構築は意識する必要がないのな。

src/app/app.component.css の変更。
変更というか、追記というか。
これも自動的にブラウザがリロードされて反映されたことを確認した。
エディタの配置とブラウザの配置にちょっと悩みそうだ。
h1 {
color: #369;
font-family: Arial, Helvetica, sans-serif;
font-size: 250%;
}

What’s next?
Tour of Heroes Tutorial やっとけって書いてあるのでやっとこう。
その前にその次に書かれてる情報は全部読んどくかな。

github上にあるソースコードとwiki
https://github.com/angular/angular-cli
https://github.com/angular/angular-cli/wiki
wikiのコマンド表わかりやすいね。

srcフォルダーの説明
rootフォルダーの説明
すごい丁寧に書かれてるのな。

(13:03)
次はチュートリアル
https://angular.io/tutorial

liveとサンプルのDownloadがあるね。
liveの方を先に見てみよう。
結果がわからないのに手を動かすのは楽しくないからね。

DashBoadとHeroesのボタンで表示が切り替わる。

なるほど、左側のはfile viewerなのね
実際のコードが見えちゃう。
便利だねー

データが入ってるところを確認
constで設定されているheroesは、実際のアプリを組むときにはサーバーからjsonで降らせることになるね。
mock-heros.tsの中身がほぼ同等なんだけど、これはテストで使うんだろうか?

app-routing.module.tsを見てみる。
なるほど。理解。

最初のレイアウト的なそれは
app/app.component.html
なるほどなぁ….
以前に作ったものに組み込んだAngular1で組んだものを思い出し、アップグレードじゃなくて他のjavascript FWに入れ替えをせねばいかんかったのだなと、妄想しつつチュートリアルに戻る

(13:17)

What you’ll build

Dashboardを作りましょ。
ちゃんと画面遷移が書かれているの好感度up。
その次にそれを動画で見せてくれるの好感度up.
Anuglarの中の人だいすきー!

次のページ
The Application Shell

これから始まるのは、これは絶対入れとけってことなのね。
なるほど、順番に読まない人の方が多いだろうしね。

続きから書こうかと思ってたけど、解説の通りにすすめて行くよ

angular-tour-of-heroes/src/app/app.component.ts
を編集
titleの変更からだね。

変更した。

app.component.htmlを変更

weicome toを消した。
.tsがコントローラーで、htmlがテンプレートっぽいよね(PHP脳)

Add application styles
src/styles.cssの変更
共通のcssファイルと、個別のcssファイルが分かれてる感じなのね。
ちゃんとデザインの設計をしておくと良さそうねぇ。

変更した内容が反映された。

(13:33)

Final code review
ああ、元のコードを直すのではなくて、 src/app/app.component.html は タイトルだけの状態になるのが正しいのね。
修正。
タイトルだけになった。

しかし、このチュートリアルすごく親切だなぁ。

(13:36)

さてとちょっとだけ休憩。

(17:53)

再開。

The Hero Editor

app/heroes/heroes.component.ts
が生成されたことを確認

heroes コンポーネントができました。

Add a hero property

src/app/heroes/heroes.component.tsを編集

src/app/heroes/heroes.component.htmlを編集

できればルートからのパスで書いててほしいなぁ。
ちょっと紛らわしい。

src/app/app.component.html を編集

heroes コンポーネントが表示されるところを指定したって感じだねぇ。

Show the hero object

中断
(18:21)

< 随時更新中>

CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 8日目です!
https://qiita.com/advent-calendar/2017/code_igniter

7日目の記事はこれ。
Codeigniter3を学ぶための環境をAWS Cloud9で作るの巻 (ansible編)

さて、みんなはCodeIgniter3のチュートリアルは見たことあるかな?
1,2はやったことある。でも3は2と変わらないからやってないわーって人も多いんじゃないかな?
CodeIgniter3のチュートリアルをやりながら、CodeIgniterのコードの話ができるといいかなって思ったんだ。

チュートリアルの場所
本家(英語): https://www.codeigniter.com/user_guide/tutorial/index.html
ユーザー会(日本語): http://codeigniter.jp/user_guide/3/tutorial/index.html
@NEKOGET(日本語?): http://pneskin2.nekoget.com/codeigniter/3/user_guide/tutorial/index.html

今気がついたんだけど、私のやつまだ翻訳終わってなかった….
私ダメじゃん!!!!

とりあえず本家(英語)を見ていこうか☆
チュートリアルの内容

  • 静的ページを作ろうぜ
  • ニュースを見る機能を作ろうぜ
  • ニュースを登録する機能を作ろうぜ

の3本だてだよ!

静的ページを作ろうぜ

https://www.codeigniter.com/user_guide/tutorial/static_pages.html
まぁ、あれだよね。
特に更新はしないんだけど、置いておきたいページあるよね。
ヘッダーとかさ、フッターとかちょっとだけ動的に値をおきたいんだけどメインコンテンツは変更ないし、でも都度都度コードを書き足すのは大変だよねー
こんな書き方があるよっていうご紹介。
チュートリアル的にはデータベースにばーんってつないで、そこから情報をばーんってとってきて、ほら!一連画面が出てきたよ!!!
みたいな方がいいんだろうけど、そうじゃなく静的ページを見せる時にはこんな風に始めるといいよって言っちゃうCodeignier3かわいいよね☆

チュートリアルにあるコードはこんな感じね。
これだとURLは

http://{CodeIgniterを設置したとこまでのURL}/page/view/{見せたい記事のファイル名}

私が書くとしたら、headerとfooterはもうパーツにしちゃってレイアウトファイルを共通のに作っちゃった上で書くから、こんな感じにしちゃうのが好き。

表示したいページをviewの中にどんどん作っていって
view/pages/{ファイル名}.php
ファイル名にHITするものは表示しちゃいましょ。

次に書かれてるのがrouterの設定だね。
application/config/routes.php

そうすると、
http://{CodeIgniterを設置したとこまでのURL}/page/view/{見せたい記事のファイル名}
これが
http://{CodeIgniterを設置したとこまでのURL}/{見せたい記事のファイル名}
になるわけですねー

さて、ここで気になると思うんだけど、

$route[‘(:any)’] = ‘pages/view/$1’;

のルールがあって
http://{設置してるURL}/Welcome
にアクセスされたとしますね。

Pages Classのそれと、Welcome Classのどちらが優先されるんだろう?

config/router.php

これをこんな風に書きかえたよ。

実際試した結果
application/view/welcome.php
の生身が、表示されます。

ではない場合はどうなるんだろう?
Pages classの処理が実行されて、まぁ当たり前なんだけど404です。

ちょっとこれだと苦しいねー苦しいねー
実用的ではないと思うんだー

http://{設置してるURL}/document/Welcome
こっちの方が使いやすいと思うけど、チュートリアルはこういうものだよーって伝える役割のものなのでこれでいいのかもしれないね。

さて、Router Classはどんなことしてるのか 実際のファイルを見てみようか!
これは、3.1-stableブランチのコードね!
https://github.com/bcit-ci/CodeIgniter/blob/3.1-stable/system/core/Router.php
Router Classは大きな仕事をしてるから、coreフォルダの中にいるんだよ。

で、これがどこで呼ばれて仕事してるかというと、CodeIgniterのcoreの中のCodeIgniter.phpの中でお仕事してます。
https://github.com/bcit-ci/CodeIgniter/blob/3.1-stable/system/core/CodeIgniter.php#L311

次は、「ニュースを見る機能を作ろうぜ」を見てみようね!

ちなみにCodeIgniter4では随分とモダンに高機能になってるよ!
http://pneskin2.nekoget.com/codeigniter/4/user_guide/general/routing.html?highlight=router

次のアドベントカレンダーの記事は ayatoさんの Dockerで作るCodeIgniterローカル開発環境 だよ!
お楽しみに☆

Codeigniter3を学ぶための環境をAWS Cloud9で作るの巻 (ansible編)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 7日目です!
https://qiita.com/advent-calendar/2017/code_igniter

前回の続きと言うか、ちゃんと環境をサクッと作れないとダメだったなって反省しました。作るものが増えるたびに手で毎回インストールして設定するとかないし!ないし!
そして session どう考えても Amazon ElastiCache 使うよね?

でも料金思うとお試しだったり勉強環境に課金するのはちょっと考えちゃうよね?

ってことでansibleを書いたよ。
https://github.com/NEKOGET/ci3_aws_c9_ansible

これでPHP7.1環境ができたよ。

開発環境にシンボリックリンクが貼られているはず

こんな風になっているはずだよ。

webコンソールから、自分が触ってるインスタンスのインパウンドに80ポートを追加すればブラウザ越しにみることができるよ。
EC2サービスからセキュリティグループ名のテキストリンクをクリック、下部にあるタブの「インパウンド」を開いて編集ボタンを押してね。 全体へ公開もできればIPを絞ることもできるのでそこは好みで。
このスクリーンショットの絵は全公開にした場合のものだよ。

これでいつでもCloud9でCodeIgniterを試せる環境になった!!!
やったー!

Welcomeページがちゃんと表示されたよ

次のアドベントカレンダーの記事はこれ!
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1) だよ☆ 楽しんでね☆

CodeIgniter3でコードを書き始めるの巻

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 6日目です!
https://qiita.com/advent-calendar/2017/code_igniter

5日目の記事は rhapさんによる 【CodeIgniter】ビューの同じ記述をまとめる(CakePHPっぽいエレメントの実装) だよ☆

CodeIgniter3でコードを書き始める時ってどうしてる?
composer でプロジェクト作っちゃう?
それともzipファイルDLしてからのスタートかな?
今日はcomposerでプロジェクト作っちゃうの話をしよっかな?

composerって言うのは、もともとsymfonyの文化の中から生まれたものでね、

https://packagist.org/

が公式サイトなんだ。 composer installってコマンドだけ習って、サイトを見たことがない人も結構いるんじゃないかな? 自分でcomposer.jsonを書くようになってから見たよって人も多いと思うんだ。

PHP関連だとやはり象さんのアイコン多いよね。かわいいなー
ここに登録されてるプロジェクトを作るためのそれらをちょっと見てみようね。

CodeIgniter本家のパッケージ
https://packagist.org/packages/codeigniter/framework

kenjisさん作 codeigniter-composer-installer
https://packagist.org/packages/kenjis/codeigniter-composer-installer
このパッケージは、紹介しているブログやサイトがたくさんあるね。
私もすごくお世話になってます。kenjiさんありがとう!!!
紹介してるサイトがあるから、紹介しておこうと思うよ。

最初の2件は2015年の記事なんだけども、現在も有用な情報だよ!改めて追加することは何もない。
最後の「ComposerでCodeigniterをインストールする方法」はMAMP環境でのcomposer installの話を書いてくれてる。 まだまだMAMPで開発してる人も多いんだけど、案外情報ないんだよね。こうして発信してくれる人がたくさんいるのありがたいなーって思う。すごいよねー。

CodeIgniter3が動く環境を用意してみようかー

今回はAWS Cloud9を使ってみるよ。
残念ながらTokyoリージョンにはきてないんだ。
AWSに買収される前にすごく気に入って使っていたサービスなので使ってみたい。そんなこんなで、Cloud9環境でcomposerでプロジェクトを作って、スタートページが見えるところまでやってみるよ!

AWSアカウントの作り方
…は割愛していいかな?
AWS アカウント作成の流れ  が公式で公開されているね☆

自主トレ環境として大好きだったcloud9がAWSになって、探してみたら公式ブログも上がってた
https://aws.amazon.com/jp/blogs/news/aws-cloud9-cloud-developer-environments/
11/30だから、公開されたほやほやの記事だね。

AWSにログインしてから、cloud9のサービスホームに移動してみようか!
https://console.aws.amazon.com/cloud9/home?region=ap-northeast-1

残念ながら、東京リージョンでは利用できないみたいだ。
シンガポールで使ってみるよ!

[ create environment ] ボタンをクリック
環境を作る画面になるよ!

名前を決めて、概要を入力して次へ!

新しいインスタンスを作るよ!を選択
t2.microを選択 お試しに良いって書いてあるしね!Free-tierだしね!
Free-tier eligible. Ideal for educational users and exploration.

Cost-saving settingの設定は、30分。
まぁFree-tierなインスタンスを使うので気にしなくていい気もするけども。
30分したら停止する設定です。

NEXT STEPをクリック 確認画面が出ますね。

cloud9は自動保存はしないんだぞ!っていう注意書きが出ます。
ここら辺はあれだよね、githubにpushして保存したいところだよね。
lean moreのリンクをクリックすると、参考になる情報があるんでみるといいと思う。今日のところはスキップしちゃうね

環境が作られ始めたよ!
大好きなcloud9のロゴが真ん中にどーん!
数分かかるよ☆

環境が立ち上がると、cloud9おなじみの画面が表示されるよ。

cloud9のエディタは下の部分がターミナルになってるの。便利だね!
以前のcloud9はubuntuベースだったけど、AWSのcloud9はどうかな? redhat系かな?
調べてみるよ?

amazon linuxになったみたいよ!

phpは最初から入ってるみたいだけどcomposerは入ってなかったね。ちょっといれとこうか

composerの準備完了です。

Composerでプロジェクトを作ろう!

するっとinstallできました。

動くようにパスを通してみるよ

ちゃんとちゃんと環境を作るのであればhttp.confを書き換えたりするといいと思うんだけど、元の設定にあわせてシンボリックリンクを貼って対応してみるよ!

apacheの起動

インパウンドの解放とEC2インスタンスのURLの確認
(この部分は旧Cloud9では必要のなかった操作だね….)
cloud9が使ってるっぽいEC2のインスタンスを選択。パブリック DNS (IPv4)をメモとこう!
http://{パブリック DNS (IPv4)}/

セキュリティグループがテキストリンクで表示されてるのでクリック。
インパウンドにhttp80ポートを追加します。

メモしておいた http://{パブリック DNS (IPv4)}/ にアクセス
スタートページが見えました。

ここまでのまとめと反省点

現在 8:55 がっつりと AWS cloud9 部分を書き換えました。
以前のCloud9の場合は、Runを実行するとサーバが起動しURLが画面上に表示されるのでhttpの起動以降はボタン一つでできたのですがAWS Cloud9では無理でした。Previewの初期値に設定されているURLがhttpsになっていることとURLにアクセスできない状況をみるに、まだその部分は開発中なのではないかと思います。
DockerかVagrantでやるべきだったかなと反省しつつ、まぁでも11/30にリリースされたばかりのこれも触りたかったので仕方ないなあと思いました….
この環境下で以降の記事も書いてみようと思います。

追記: mysqlも入ってました

6日目でした☆

CodeIgniterの歴史

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました!
https://qiita.com/advent-calendar/2017/code_igniter

この記事の前の記事は
CodeIgniterのどんな話をしようかな?の巻 です
このままだと毎日NEKOGET !!!!
25日までガラガラなんで、誰か記事頼むよ。本当お願い。

さて、歴史の話!
今、CodeIgniterはバージョン3!!!
ってことは1の時代も2の時代もあるんですね!
そして4への未来へと続く☆

みたいな話をすっごい主観的に書くよ!
ほぼNEKOGETとCodeIgniterとの仲良し記録になる予定なので軽い気持ちで読んでね☆

CodeIgniter1の時代

CodeIgniter誕生
この時代のことをNEKOGETは知りません。
出会ったのは彼が1.5か1.6の頃だからね
ユーザーガイドに書かれている誕生の時

Version Beta 1.0 Release Date: February 28, 2006

1.0はベータ版だったんだね。

Version 1.2 Release Date: March 21, 2006
ベータじゃ無くなったのは1.2 正式リリースって意味では2006年3月21日がお誕生日
おめでとう! CodeIgniter!!!
PHPのバージョンは幾つの頃だったんだろう?

http://pastport.jp/user/yandod/timeline/php-history
PHP年表によると2006年春はPHP5.1.xが最新だったみたい。namespaceもまだだし、配列もarray()の時代だね。

Version 1.5.1 Release Date: November 23, 2006

私と出会ったCodeigniterさんは1.5だったと思うんだよね。1.5.x ← ここの数字は覚えてなんだけども。
当時の私はまだDreamWeaverでPHPを書いていてね、スニペットを自分のために、登録して使えるようにしてた記憶があるよ。
まだCodeIgniter徹底入門は出てなかったと思う。
今Amazonを見て見たら 出版社: 翔泳社 (2008/6/10) って書いてあった。
知り合ってから10年以上になるんだなぁと思うと感慨深いね。
当時Codeigniterを開発していたElis.LabのホームページのHTMLがそれは美しくてね….
当時まだbootstrapもない時代で、xhtmlのmarkupがどうあるべきかみたいな話題が溢れてた時代。
htmlの構造もmarkupもclassのつけ方もそれは美しくてね、感動したのを覚えてるよ。
見た目は良くてもぐっちゃぐちゃなhtmlを吐き出さない会社の作ったPHPのフレームワークなら使って見たいと思ったんだ。
使えるようになりたいともね。(あの頃の美しかったhtmlは、もう今となっては思い出の中にしかないんだけども)

当時のCodeigniterは結構まだバグもあったのだけども当時から、application層でclassが上書きできる仕組みにはすでになっていて自分で直したものをそこで試せたし、本家に報告をして直してもらうまでの間application層で対応したものを設置して実装できたんで本体に手を入れてみたいなことをせずに修正できたんだよね。これは3になってもその仕組みは残っていてすごく便利だったんだ。
Model周りとか他のフレームワークのライブラリを使う方法とかそういう情報が結構出てたように思うよ。

CodeIgniter2の時代

すごく長かったように思うなぁ2の時代
1から2へのバージョンアップは、form_valodation classの名前が変わったのだけがちょっとめんどくさかったけどあとはそれほど難しくなかったように記憶してるよ。

https://www.codeigniter.com/user_guide/installation/upgrade_200.html?highlight=upgrade

これは、1.7から2.0へのアップグレード方法が書かれているユーザガイドのURL
完全に忘れてたんだけど、そうそう、pluginのディレクトリが無くなったのよね。

CodeIgniter2から3の時代(ライセンス問題勃発)

CodeIgniterといえばライセンス問題と言われた(?)ほどに不遇の時代。
CodeIgniterライセンスから

CodeIgniter3のライセンス問題に対する意見書公開

というのを、弁護士の先生にお願いをして、公開したのはすごく懐かしい思い出。決して安くななかったけど個人でこれをやれたのは勢いがあったんだなぁ私ってつくづく思うよ。
結局バージョン3になり、開発がElis.Labからブリティッシュコロンビア工科大学になりあれほどもめたライセンス問題はさらっとMITライセンスになったのでした。
本当にあの騒動はなんだったんだろうね。もうとっくに3を出してもよかったんじゃないのって時期から1年も待たされたんだよね。でも結果すごく良い状態の3に出会えたのはよかったことなのかなとも思うのよね。

元々CodeIgniterは元々ExpressionEngine CMSっていうCMSを開発するためにあったのね。で、もっと小さな規模での企業サイトを作る用のCMSがCodeIgniterで作られていてElis.Labで売られてたのね。
それらを買ってみたりしてコードを読んで勉強したのはすごく良い思い出。
seezoo っていうcmsもあった。これもまたすごく素晴らしかったんだ。

CodeIgniter3の時代

3は現行最新バージョンだね。

Version 3.0.0 Release Date: March 30, 2015
Version 3.1.6 Release Date: Sep 25, 2017

3がリリースされたのが2015年
最新版が出てるのが今年の9月
まだ本家だと2のユーザーガイドも見れる状態だけども、そろそろみんな3にバージョンアップしてほしいな。
したよね?
魔改造しちゃったCodeIgniterもうまいことApplication層へ改変コードを移動して3へのバージョンアップに挑戦してほしい。
CodeIgniter3はPHP7.2のテストも実行されてるし、passされてるよ。 怖くないよ!!!

3の続き話は後でにしようか。ちょっと長くなりそうだしね。

そして未来のCodeIgniter4

これも、4の話はボリュームかなり大きいから後から改めて話をしようと思うよ。

そんなこんなで3日目の記事を書きました。

次の記事は@rhapさんの 【CodeIgniter】プロファイラを外部ファイル出力できるようにする です!
お楽しみに☆

追記:
いやぁ、すんごい嬉しい!!!! もっともっとCodeIgniterの話をしてくれる人がいっぱい現れるといいのに!いいのに!!!
書きたくなっちゃったなーって方は是非、 CodeIgniterアドベントカレンダー に登録してくれると嬉しいなぁ。めちゃくちゃ嬉しいなぁ☆
https://qiita.com/advent-calendar/2017/code_igniter

CodeIgniterのどんな話をしようかな?の巻

こんにちわ! NEKOGETです。
今朝も美味しいトマトジュースを飲んでから、この記事を書いてます。
さて、この記事ですが、実はアドベントカレンダーの記事の1つです。
前の記事は、

なぜこのアドベントカレンダーのURLがcode_igniterなのか

でした。

アドベントカレンダーのURLはこれ!
-> https://qiita.com/advent-calendar/2017/code_igniter

さて、なんの話をしようかざっと書き出してみるよ

  • CodeIgniterのバージョンのお話
  • 現行バージョン3はPHP7.2のテストが通ってるようだよ!
  • Composerを使って外部ライブラリを利用する時に書きたいドライバー
  • 認証機能どうする? 何か良いライブラリある?
  • modelをどう書く? テーブルに1対1じゃーなくてもいいんだよ?
  • ドキュメント翻訳の話
  • 初めて学ぶ時には、なにからやればいいんだろう?
  • バージョン3でunitTestを書くには
  • HMVCエクステンションの今と昔
  • CodeIgniterは素直に書こう。何重にも継承したりするのは何か間違ってるよ?
  • AWS CILとCodeIgniterのModelの話 (バージョン4)
  • 日本語の情報は今はどこで知ればいいんだろう?

うーん 12個。
全然足りないよ?どうしようね?
話したい話、話せる話よりも、誰かが聞きたいって言ってくれる話がいいのかも知れないけども勉強会で話す内容ももうすっかりネタ切れでもあるし苦しいね。苦しいね。

  • CodeIgniterの歴史(1から4)
  • 英語で見るCodeIgniterの最新情報の追いかけ方
  • CodeIgniterのなかのCodeIgniter.phpのお話

15個

いやいや、英語じゃなくて日本語で最新情報追いかけたいわ…..
でもまぁ本家が英語だし、英語だよなぁ。
もっとちゃんとNEKOGETが発信しとけって話よね。来年….. 来年から頑張るよ!

CodeIgniter4の話しちゃう?
でもリリース2020年とか言ってるし、どうしよう???

  • CodeIgniter4の状況
  • CodeIgniter4で増える(はず)のモダンな気がする何か
  • 現状開発中のCodeIgniter4に3から移行することを考えて見る

18個
23個には全然足りないけど、とりあえずネタ出し。
書けるかな…..
書ける気が全然しないんだけども、まずは言い出して見ることも大事だよねってことでまずは公開して後悔してみる事にします!
全然違う事書くかも知れないしね。なんてったってNEKOGETだしね!

CodeIgniterは使っててすごく楽しいPHPのフレームワークです。
何も特に考えなくてもサクサク書けるからね。
それはメリットもあるしデメリットもあるよ。
ファイルはすごく多くなる。同じことまた書くの?なんてこともあるんだけど、安易に共通処理にまとめるよりはずっとシンプルでわかりやすいコードの姿を保つことができる。
でもまぁそこは考え方次第なんだと思うんだよね。
そんな主観な感じでかけたらいいなと思う、2日目の記事です。

micro:bit用ミニバギーキットを組み立てるの巻!

https://microbit.doorkeeper.jp/events/67044
このもくもく会でミニバギーを組み立てた話をします!

この記事はアドベントカレンダー
https://qiita.com/advent-calendar/2017/microbitのために書きました。
次の人のURLなんかはあとで更新します。

きっかけ

きっかけの話。
以前主催をさせていただいているイベントで、micro:bitの実物を拝見したわけです。

1つのmicro:bitにはHello Worldの表示をしています。
それは温度を計測し、その計測したデータをもう一つのmicro:bitへ送信します。

温度を受信したmicro:bitが受信した温度を表示する

というデモをみました。
コレがもう、めちゃくちゃ面白かった!
普段の私はWeb屋さんです。
描いたプログラムの結果はだいたいブラウザ経由で見ます。
もしくはターミナル上でコマンドを入力した結果として見ます。
それがね、目の前の小さなセンサーの5×5のLEDで表示されるわけです。
当たり前のことなんだけども面白かったのです。
手の中で動くプログラムのレスポンス!
なにコレ面白い!!!!

面白かったので速攻注文しまして、
で、1人で楽しむにはちょっとハードルが高くて、みんな教えてね☆という目的でFacebookグループを作りました。
自分自身がちゃんと触れる時間を確保するために、もくもく会を計画☆
そして今日がそのもくもく会の2回目だったわけですね

micro:bit Facebookグループでミニバギーの存在を知るの巻
少しずつmiro:bitを触り始めました。
そして作ったFacebookグループでこのミニバギーの存在を教えていただいたのですよ。
きっと組み立ても簡単だと思ったんですよ。
まぁその想像は、完全に裏切られたわけですけども。主に私に。

USBケーブルが刺さらない衝撃

開封をしまして、組み立て始めたわけです。
取扱説明書は全部英語で、プログラミングする画面はメニューが英語で本当にもうさっぱりです。
英語が全く全然わからないわけではなくて、日本語で書かれてる操作メニューが説明書のなにをさしてるのかがわからないわけですね。
全くわかりません。もう涙目です。
プログラミングする画面を英語モード変更
「おお!わかる!!!! わかるぞ!!!!」
英語にしたら見た目が説明書と全く同じになり、操作がわかるようになりました。
もくもく会はだいたい3時間ぐらい頑張るわけですが、このマニュアル、1つずつ部品でプログラミングして動作を試して進めるんですが途中でUSBケーブルが刺さらなくなります。
つまりは電源パーツにネジで留め付けた結果、5つあるライトとケーブルの差込口との間にスペースがなくUSBケーブルが刺さりません…..

これは後から追加購入した、プラスチックのワッシャーを挟んで組み立てたものです。この写真ではUSBは刺さりますが、当時ワッシャーを入れるまでは干渉してUSBケーブルが刺さらないのです(絶句)

部品をAmazonで注文し、再びTry
購入したワッシャーはこれです。欲しかったのはとりあえず5個
ミニバギー皆で遊べるといいなと思って2台買ってあったので合計で10個です。100本は買いすぎとしか思えませんが100本です。

Amazon: http://amzn.to/2i94V1a

ワッシャーが入ってるのが見えますかね?

そしてUSBが刺さりました!!!
やった!
続きが作れる!!!

そして自分の不器用さとの戦い
説明書の通りに作業してると絶対部品なくす自信がありまして一旦プログラムは後回しにしました。そして組み立て始めたのですが……

とにかく部品が小さい。
ナットを隙間に入れる難しさに悶絶

(1)ナットはネジに刺して回して付けとく
(2)ネジをつけたままの状態で配置する
(3)落ちないようにテープで固定してからネジを抜く

という技を教わりまして、やっとつけることができました!!!
で、つけてから…. これだとモーターがつかないねってことで取り外してやり直すことに。
この時点でこのちっちゃいナットを床に落としまして、もくもく会に参加していただいている皆様に3回ほど一緒に探していただきました。大感謝!!!

はまらないモーター…. 本当にこれでいいの?という不安
よーし!モーターつけちゃうぞ!!!
と思ってさしてみたらですね、刺さりません。
なんかグラグラして不安定です。何か間違ってるのかと思って説明書を読んでもわかりません。
隣に座ってらしたジェントルマンに助けてもらって、やっとはめるべき場所がおかしいことに気がつきました。

これですねー…. 真ん中の方に、出っ張りがあります。
そういう部品だと思ってました…..

ダメ元でカッターで板を削ってみるの巻
はまらないのでどうしようと悩んだわけですが、「削ってみるしかないですねー」というありがたいアドバイスをいただいたわけです。仕方ないですねー。失敗してももう1台あるし仕方ないよねー…. でもデザインカッターあったっけ?今日は持ってきてないなってことで少し大きめのカッターで削りました。ドキドキしながら削りました。

モーターが入った!!!!!
入ったぁあああああああ!!!!!!
入らなかった時の写真をなぜ撮らなかったのか….. アホか私は!
これが、0.5mmぐらい浮いてて押し込んでも押し込んでも入らなかったモーターがちゃんときちんと入った姿です。

車輪を止めるネジが大きすぎる…. 多分これパーツ壊れるよねというリアルな恐怖

車輪ですね。
肝心のネジを撮影していません。
アホですね…. orz
パーツの大きさを考えても、これでネジを差し込むと絶対パーツ割れるんですけど本当にこれネジ締めるの?本当に????ってことで締めてみたんですがダメです。壊れます。ネジを後日注文するか他の方法を考えましょってことで今日のところはテープで固定しました。

モーターの上の屋根部分を差し込み、
最後にmicro:bit部分をつけて完成です!!!


次回もくもく回参加の時に、プログラムを書こうと思います。はい。

まとめ
一人じゃなくて本当に良かったです(; A ; )
絶対無理でした。
PHPは書いてても、ガンプラは組んだことほとんどないんですもの。

参考URL
micro:bit アドベントカレンダー :
https://qiita.com/advent-calendar/2017/microbit

micro:bit本体
http://amzn.to/2zVqw8t
https://www.switch-science.com/catalog/3380/

micro:bit公式(日本語)
https://microbit.org/ja/

スイッチサイエンスさんの記事
イギリスのプログラミング教育向けマイコンボード「マイクロビット」が日本に上陸

ミニバギーキットのURL
https://www.switch-science.com/catalog/3415/

micro:bitのもくもく会とかやってます。
https://microbit.doorkeeper.jp/

書籍
買いましたがまだ読めてません。早く読みたい!