今年の抱負に対する結果はどうだったか?について振り返る

今年の1月3日に新年の抱負を書いていた。具体的な内容はすっかり忘れていた。(笑)

今年の抱負というかキーワード

それで、箇条書きの5項目についてそれぞれどうなったかを書いておく。

(1) スマホアプリ(ハイブリッドアプリ)制作のスタディ(→ 勉強のみ)

これは早期に諦めた感半端ない。一応勉強はしたけど、具体的な顧客もそのイメージもないので、本当に「スタディ」で終わってしまった。今後どうするか分からないけど、そういう案件は誰かに振るというのが最も現実的。

(2) Adobe XD を使ったデザイン・プロトタイプ制作(→ できた)

これはもう、自分でデザインしてサイト作るときには必ず使っている。自分の中では定番ツールになった。
先日、ついにXDも正式リリースして有料化されたので、僕もサブスクリプションを追加した。(僕はPSもXDも単体サブスクリプションなのだ)

(3) CodeIgniter を使った簡単なショップカート制作(→ できた)

こちらも進展は大きかった。
手始めにクライアントのサイトの一部に簡単なショップカートを作って組み込んだ。これは単にカートになっているだけで、受注管理とかはなくてメールだけでハンドリングするもの。会員機能もないシンプルなもの。

さらに、ウェブサービスのシステム開発の依頼があったので、そこでCIを使った。実はまだリリースできてなくて保留になっているけれど。
それから、見積もり系のシステムの依頼があって、それにもCIを使った。この秋はそれをひたすらやっていて、一旦Phase1が終わったところ。

CodeIgniter(フレームワーク)の使い方を覚えると、どんどんアプリケーションを作りたくなるね。今後も楽しくやって行くつもり。

(4) WordPress の制作手法の見直し(→ 別のものに興味湧く)

これは WP REST API を活用したいという趣旨だったけれど、結局全然やってない。今後、またやろうとするかもしれないというレベル。
それより、WordPress.com の方に興味が湧いてきていて、いわゆる「サイト作りたいんですけどー」とか「ブログやりたいんですけどー」というニーズに対して一声「これどうですか?」と勧めたいなと思っていて、そのために、自分のブログなりサイトをこのサービス上で運用することを考えつつあるところ。

(5) フロントエンド(→ イメージだけ継続)

とりあえず今のところ、Vue.js をなんとか使いたいと考えているので・・・考えているだけだけど、継続して来年もなんか考えたい。jQueryは便利だけど、そうじゃない世界にも行ってみたいという希望があるので、その辺のモヤモヤが解消できたらいいなと思っているところ。

 

以上のような感じだけど、とりあえずCodeIgniterでアプリケーション作れるようになったのが今年の一番の成果だった。
それと、サイト制作に関しては、必ずしも作ることにこだわらないで便利な(手間いらずな)ツールを利用して効率的にやろうという気持ちになってきたことがあると思う。

というわけで、来年の抱負はまた正月に書くと思う。

[CodeIgniter] row_array()を使ってレコードの複製をしてみた

複製ボタンを押したらエントリーが複製される、という機能を作った。
以下はその中のDBレコードを複製する部分。

$query = $this->db->get_where($table_name, array('id' => $id)); // (1)
$row = $query->row_array(); // (2)
unset($row['id'], $row['time_update']); // (3)
$row['time_entry'] = time(); // (4)
$row['open'] = 0; (5)
$rst = $this->db->insert($table_name, $row); (6)

(1) テーブル名と複製したいレコードのIDを入れて結果オブジェクトを得る。

(2) row_array() を使って該当するレコード(1個だけ)の配列を得る。
※ row() だとオブジェクトが返ってくる。

(3) 配列から id の要素と time_update の要素を取り除く。
※ 次の insert で id が入るとエラーになるから。
※ この場合は、更新時間は記録しないので、time_update も取り除いている。

(4) 新規登録時間を記録するため、配列に time_entry を追加する。

(5) 複製したレコードは「非公開」にするため、open のフラグとして 0 をセット。

(6) レコードの内容一式の配列を引数に渡して insert を行う。

結構、簡単にできた。
insert の引数に、オブジェクトを指定することもできるので、row() で取得したオブジェクトを使っても出来るとは思うけど、配列の方が簡単じゃないかな(?)という気がしたので、row_array() の方を使った。

Ajax使って新しいことをやってみた

新しいことと言っても画期的なこととかでは全然無いので・・・

おかげさまで CodeIgniter でのWebアプリケーションもまた1個できた。
それで今回、サイト全体をCIで管理するのはやめて(つまりトップに index.php 置くのやめて)、システム用のディレクトリを作ってそこに管理サイトを置き、サイトページからはAjaxで通信するように構成してみたが、
結論からいうと、そこまでしなくても良かった気はしてる。(汗)

発注元の都合により、サイトにはPHPの静的ファイル群があり、さらにブログなどはWordPressで作るらしい。だから上記の構成を考えたわけであるが、AjaxとPHPフレームワークとの連携は、思ったより相当、大変だった。

<ページ遷移>

サイトトップで条件を選んで、条件にあった情報の一覧を表示し、詳細ページにも遷移する。
一覧ページでユーザーが必要な情報にチェックを入れて、次に進むと、選んだ情報とユーザー情報の入力フォームが表示され、そこから確認画面に行き、完了画面まで行くと、メールが送信されるというもの。(ショップのページみたいな感じ)

各ページは、PHPの静的ページ。
CIで管理している情報を、PHPの静的ページに出力させるには、(たぶん)Ajaxしか無いので、各ページで動くJSのコードを書いた。それぞれからCIの情報にアクセスしてゲットした内容を書き出し、フォームに入力されたデータの送信を行い、次のページに遷移(リダイレクト)する。
それで、検索結果と詳細ページは、URLクエリを叩いたら出るようにした。

スマートじゃないけど・・・出来てしまったものは仕方がない。(笑)

<ページ間のデータの保持>

今回、初めて Web Storage (localStorage)を使ってみた。なんのことはない、非常に簡単だった。
一覧ページは複数に渡るので、ページを跨いでユーザーがチェックした情報(ID)が、どれであるかを保持しておく必要がある。そのために使った。
送信完了すればデータを消去する。(残ってしまう場合もあるけど)

<市区町村コードAPIの使用>

ユーザーがエリアを選択するため、および、管理側でエリアを登録するために、市区町村コードAPIを使ってみた。
http://www.land.mlit.go.jp/webland/api.html
これは、都道府県コードで呼ぶと、その中の市区町村のJSONデータが返ってくるというもの。
都道府県コードAPIというものが(たぶん)無いので、都道府県コードの配列は自分で作った。
ユーザーが都道府県を選択すると、その横のセレクタに市区町村の選択肢が出てくるようにする。

Ajaxで取ってくれば簡単だろうと思ったが、やってみると意外と色々やらなきゃいけないことがあった。
このサービスはSSLでは提供されていないようなので、SSLページからAjaxで呼ぶとERRORとなる。さあどうしましょ?

仕方ない、というか、セレクタ操作するたびにAPI呼びに行くのもダサいなということも同時にあって、一旦、APIの情報をサーバー上に保存(キャッシュ)するようにした。DBにするか迷ったけど、テキストファイルに保存してみた。
そこからCIでAjaxに提供する。最初、管理画面もAjaxでAPI呼びに行っていたので、そちらはCI内で処理するように変更した。それでようやくスッキリ動くようになった。

大変ですな。当初はすごーーく簡単に考えていたけど、意外としんどかった。
しかし結構いろいろ、AjaxやJSやjQueryのことが勉強になった。今度からもうちょっと素早く立ち回れるようになるだろう。今回のも、イケてない部分もあるので改善したいところ。

フレームワークの安心感

CodeIgniter案件、一応、管理画面ができたところ。
構成的にもスッキリしていて良い。
あとはサイト側の実装作業が残っている。

今まで、特にスクラッチでWebアプリケーション作っていた時には、出来たあとで何かしら微妙な不安感があって、
「あの辺、どうだったかな?」「もう一度見直すのもしんどいな」
とか思うことがあったが、今回に関してはそういうことは無い。
見直そうと思えばすぐに見られるし、把握してないところも無い感じがする。

CodeIgniterだからっていうのは多少あるかもしれない。シンプルだから。
だけど、それだけじゃないな。フレームワークというものがそもそも、そういうもんなんだろうと感じる。

それと、CI使い始めた頃は、MVCの使い分けがいまいち曖昧だった。特にModelとController. 結構、コントローラで色々やろうとしていた。
しかし調べていて、ロジックはモデルに書いていくものだということを知った。コントローラを大きくするのは良くないらしい。そうしてみた結果、全体の流れが把握しやすくなった。
また、モデルの中でも、役割というか階層というか、個別のデータ処理とそれらをまとめる処理みたいな、モデルとひとくくりに言ってるけど実はそんな薄いものではないんだという概念。そうかあ、そういう風にクラスを配置していけばいいのかーと思った時に、頭の中がスッキリしたし、出来上がったものもスッキリした。

今の感じならばメンテしやすいし、後々の仕様追加にも柔軟に、早く対応できるだろうと思う。

あと、ちょっとした細かいところだけど、編集フォームでセレクタのoptionを、すでに登録されている値で選択済みにするような場合、フォームヘルパーの form_dropdown()(単数選択)あるいは form_multiselect()(複数選択)の引数に値もしくは配列を渡すだけでいい、というような、簡単なデータの取り扱いで出来ちゃうところなどは、非常に便利だと感じた。

というわけで、安心感とともに楽しさも感じるようになってきた。(^^)

CI 開発進行中・・

CodeIgniter案件、一応進んでいる。

しかし当初の要望、「半月で」っていうのはあまりにも非現実的(というかなんか通常制作みたい)なので、1ヶ月ぐらいの予定を宣告したのち進めているんだけど・・・まあそれはなんとかいけるはず。

今は管理画面を作っているところ。管理者の登録と、3種類ぐらいの基本設定の登録処理はできた。
あとはメインのデータを登録する処理を書くわけだけど、DBのフィールドが足りないのでそこを追加してからだなと。

DBに別個にフィールドを作るのか、それともJSONで1フィールドにまとめちゃうか、迷うところだけれど、ポイントとしては項目を検索対象にするならばフィールド、単なる表示情報ならばJSONでまとめるのが良いだろうと思っているのだけど。

で、住所データなどは都道府県での絞り込みとか、郵便番号もあるかな?とか、ゆくゆくショップみたいなものになる(??)んだったら建物名も分けといた方が良いかな?、電話もFAXも分けとくか、とか考えていると、結局全部、フィールドを設けることになってしまうんだが、まあ良いか。汎用性の高そうなデータは個別のフィールドを持っておいた方が無難だろう。。

てな具合で、コード書きながらDBテーブルいじって、DBインストーラーに項目追加したりとか、やってからまた元の作業に戻ると・・(^^)