kyutaro_kyutaroの日記

福岡でPHP使ってます(LaravelとかECCUBEとかWordpressとかあたりを諸々)。よろしくお願いします。

TravisCIを使ってみた

 最近、色々と自分は技術的に遅れてるなと感じる日々です。
 そんなこんなもあり、継続的に学習を続けているのですが、それはそれとして、単体テストを自動化してくれるツール「CIツール」なるものがあるというのを最近知りました。
 すぐに使えるようになるなどとは思っていませんが、とりあえず百聞は一見に如かず、どんな感じでどう便利なのかを確かめるために使ってみました。

CIツールとは?

 単体テストやデプロイを自動化してくれるツールです。先程単体テストを自動化してくれるツールと記載しましたが、正確にはもっと色々なことが出来るみたいです。
 このあたりは下記サイト様などを参照されるとよろしいかと思います。

www.techmatrix.co.jp

 今回、Githubと連携して簡単に単体テストを自動化出来るということでTravisCIを使ってみました。

TravisCI + Github連携による自動テスト手順など諸々

 手順については、下記記事などを参考にさせていただきました。

knowledge.sakura.ad.jp

qiita.com

 特に難しいことはないので、TravisCIの公式サイト登録からサンプルのテストコードを自動でテストするまで1~2時間あれば出来るのではないかと思います。(githubアカウントを取得済でない場合は、githubの登録、使い方含めもう少しかかるかもしれません)

使ってみての所感

 記事も丁寧であり、またTravisCIサイトの画面もシンプルで分かりやすいので、特に何かに詰まるということはなく、割とすんなりと使うことが出来ました。
 便利さについては、PHPの各バージョン毎のテストが一斉に出来たり、結果をメールで通知してくれたりと、 色々と捗るなと感じました。
 確かに自前でスクリプトを書けば結果をメールで通知してくれたりはするのでしょうが、こうしたCIツールを使えば、 そもそもそのスクリプトを書くためのコストを削減することが出来ます。なので、使っておいて損はないのではないかと思います。

 CIツールに興味を持ってるけど、どうしようか悩んでいる方は、とりあえずTravisCIを使ってみては如何でしょうか?

JSフレームワークの選定とVue.jsを使ってみた所感

 JSフレームワークに以前より興味を持っていたのですが、日々の業務や他の学習事項に時間を取られて中々学習時間を取ることが出来ませんでした。 しかし、最近少し落ち着いてきたこともあってようやくJSフレームワークに手を出すことが出来たので、その使ってみた所感を書いてみることにします。

その前に...

そもそも何故JSフレームワークに興味を?

 いわゆるSPAというものに興味を持っていたからです。
 ページ遷移を画面自体の切り替えではなく、画面内のコンテンツを切り替えることで実現するSPAは、ストレスなく遷移出来るという点において自分にとってはとても革新的で魅力的なものでした。
 また、SPAであればネイティブアプリと遜色ないWebアプリを構築することが出来るらしい、と以前コチラの記事等で紹介されていたことも大きく自分に印象付けるものでした。
 そうしたSPAを実現するためのツールとして、JSフレームワークが紹介されていた、これが自分がJSフレームワークに興味を持ったキッカケです。

JSフレームワークの選定→何故Vue.jsにしたのか?

JSフレームワークの数は多い

 JSフレームワークは現在開発が大変盛んで、いざJSフレームワークに手をつけようとしても、 下記に示したようにぱっと有名なものだけで目がまわる程の数があります。

  • Backbone.js
  • Ember.js
  • Knockout.js
  • AngularJS1系
  • AngularJS2系
  • React.js
  • Ractive.js
  • vue.js

 そんな中で、私はJSフレームワークとしてVue.jsを選定しました。

何故Vue.jsにしたのか?

 理由は単純で、私は下記の基準を以て選定しており、その基準に最も合致したのがVue.jsであったからです。

  • メジャーなフレームワークである(質が担保されている)
  • 現在も活発に利用されている、あるいは最近トレンドになってきている
  • シンプルで学習コストが低い

実際に使ってみた感想

 公式ページを見ながらサンプルを作りつつ、APIを使った通信などもしてみました。 下記はその感想です。

  • 確かにSPAを実現するのに適したツールだと感じた
  • そして、SPA実現のキモとなるのは、ルーティングとコンポーネントであると感じた
  • htmlに独自の要素を持たせたり、jsにhtmlテンプレートを持たせたりすることに少し戸惑いを感じたが、概ね抵抗なく使えた(今までjQueryを使っていたが、特に発想の転換などを迫られるような感触はなかった)

詰まったところ

APIとの通信

 単純にAPIとの通信を行おうとすると、'Access-Control-Allow-Origin'のエラーが出てしまいます。
 調べてみますと、これはサーバサイド側のサイトで'Access-Control-Allow-Origin ヘッダー'を付け足してやらないことによるエラーでした。
 ただ、APIを送る先は自分で管理しているサーバではなかったので、どうするべきか悩みましたが、結局自前のPHPを仲介して取得してやればいいと気付き、解決しました。

最後に

githubに公開してます

 今回学習用に作成したサンプルアプリをgithubで公開してますので、もし興味がありましたらご覧ください。

github.com

構成管理ツールど素人がAnsibleを使い感動した話

はじめに

 諸々の都合上、サーバ構築などもやることが多いのですが、 最近、サーバ環境の自動構築などをやってくれる構成管理ツールなるものがあることを知りました。
 これは、そんな構成管理ツールを知ったど素人がそのツールの一つであるAnsibleを使い、 感動するまでの小話です。

そもそも構成管理ツールとは?

 当たり前の人にとっては当たり前なのかもしれませんが、意外と知らない方がいるのではないかと思います(私とか)。
 構成管理ツールというのは環境構築などの作業を自動化してくれるツールです。詳しく調べたわけではないので完全に私見ですが、今まで手作業やシェルスクリプトでやっていた環境構築をもっと楽にしようという背景で生まれたのだと思います。
 とはいえ自動化といっても画面でポチポチしたりして環境構築、というわけではなく、yamlファイル等にミドルウェアのインストール指定など環境構築のための記載をする必要があります(少なくともAnsibleでは)。
 それでも、これまでより労力をかけずして環境構築が出来るので、流行ってきたのだと思います。

使うまでの経緯など

 キッカケは単純です。つい先日、とあるエンジニアさんから構成管理ツールなるものがあることを教えてもらったからです。
 それまでは、サーバの環境構築などを手順書などに頼って一つずつ手作業でやっていました。が、構成管理ツールを上手く使えばこれらの作業を自動化出来るというので、使ってみようということになった、という話です。

まずはどの構成管理ツールを使うかという話 → Ansibleが使いやすいのでは

 ど素人の私にとってまず何を使うべきかの選定から入りました。そもそも、構成管理ツールといっても一つしかないわけではなく、

  1. Puppet
  2. Chef
  3. Fabric
  4. Ansible
  5. Itamae

など様々な種類があります。
 そんな中、「インフラ学習ツールとしてのAnsible」や「[構成管理ツール][プロビジョニング]chef,puppet,itamae,ansibleらあるけどメリットデメリットまとめてみた」などのサイト様を覗いてみると、Ansibleが学習コストも低く、使いやすいらしいということが分かりました。そういうわけで、先ずはとっかかりとしてシンプルであろうAnsibleを使うことにしました。

実際にAnsibleで環境構築してみた

 細かな環境構築の話などはここでは本題から外れるので置いておくとしますが、Ansibleで環境構築をするにあたって下記記事を参考にさせていただきました。

 ちなみに、vagrantを使っております。vagrantを使ったことがあるのであれば、割と簡単にいくと思います。

実際にAnsibleを使ってみて

感動した!

 お世辞でも何でもないです。

だけではなく、

  • DBユーザーの作成
  • confファイルの設定、phpMyAdminの設定

などの諸々の設定もyamlファイルに記載すれば全てやってくれるのです。 環境を立ち上げればもうPHPを動かすことは出来るし、phpMyAdminだって見ることが出来る…… 技術関連で凄いなと思うことはよくありますが、構成管理ツールはそれを通り越して「感動した!」レベルでした。

最後に

AnsibleにはRolesという機能もあります

 一度Ansibleで環境構築出来たなら、今度はRolesという機能も活用してみてください。
 下記サイト様などをご覧いただければ、大体どういうものか、どう便利なのか分かるかと思います。

RolesでAnsibleのPlaybookを整理してみよう

今回作ったansible関連ファイルなどをgithubにあげてます

 今回ローカル環境構築用に作ったものは、githubに上げていますので、もし良かったらご覧になってみてください。

MyAnsibleレポジトリ

PHPの特徴(メリット・デメリット・その他)についての私見

 技術的特徴のみならず、様々な観点からPHPの特徴をまとめてみました。あくまで現時点での自分の見解です。そもそも他の言語に詳しくないことによる的外れな意見などもあるとは思いますが、参考の程に見ていただけたらと思います。

...とその前に最初に言ってしまいますと、PHPはこれに尽きると思います。

「緩くて自由でとっつきやすい」……いい意味でも悪い意味でも

PHPの特徴

  • メリットの観点から
    • 手軽でスピード感のある開発が可能
    • 優しい言語。プログラミング初心者にとってもとっつきやすい
      • 例えば、初心者が動作を確認するまでの簡単さ。PHPだとxamppなどのツールがあり、ホスティングサービスなどではPHPを提供しているサービスも多い。「先ずはプログラムが動くことを実感したい」であろう学習者のモチベーションを保ち続けながら学習を進めることが出来る
    • 記事の豊富さ(問題解決の容易さ)
      • 非常に大きな利点。PHPはそのお手軽さからユーザーが多いので、必然的にPHPに関する記事も多く、解決方法も検索することで見つかることが多い
  • デメリットの観点から
    • 緩すぎる言語であること
      • 緩いことはPHPの代表的な特徴であり、これに助けられることもあるが、反面、緩すぎることで様々な問題を引き起こしてしまう
        • 後述するが、自動の型変換機能が基本的に何に対しても適用されてしまうことなどがその代表例。文字列や数値といった性質の全く異なる型の変換すら可能であることは、PHPのよくないところであると思う
        • 他の例として、関数の返り値に何でも宣言出来てしまうのは、よくない構造である。確かにbooleanか配列(あるいは文字列)を返す関数であれば、チェックも併せて行えるため、活用出来る機会もあるかもしれないが、配列か文字列を返すような関数は、後の処理を分散しなければならなくなり、却って複雑なコードに陥ってしまう危険性がある
      • 個人的な思いとして、この緩すぎさがもう少し固くなってくれれば、もっと良い言語になるのではないかと考えている
  • その他の観点から
    • 型の自動的変換機能
      • メリットでもあり、デメリットでもある
      • 比較的小規模な開発ではメリットと出来る。というのも、型の自動変換機能によってコードの量などを節約し、スピード感のある開発が可能になるからである。
        • 分かりやすい例は数値の自動変換である。本来は、数値型であってもintやfloatなど様々な種類が存在するが、PHPでは数値の型を気にせずに計算を行うことが出来る
        • ただし、文字列と数値を組み合わせるような場合には、明示的にキャストなどをしておいた方がよい
      • 型を気にしないことは、しばしば不具合の温床となるという点においてデメリットであると思う。一番起きやすいのは数値と文字列を連結したりすることによる不具合である。(大規模な案件でPHPというよりJavaが使われたりやすい事情はこのあたりのPHPの”ゆるさ”が影響していると思われる)
      • 常に型については念頭においた上でこの機能を活用するべきである
    • 配列関連の扱いやすさ
      • PHPだと、スカラー配列も連想配列も同じように書くことが出来るし、後からの追加も容易。例えばJavaなどでは、配列は数を事前に宣言しなければならないし、何より連想配列は専用の構文(HashMap)を使う必要がある。単純な一次元配列であればさほど気になる所ではないが、多次元配列などを扱うことになると、PHPの配列関連の”ゆるさ”は使いやすいし、コードもシンプルになる
        • ただ、Javaに精通した人にとってはかえってこのPHPの”ゆるさ”は問題だと思うのかもしれない
        • 書いていて気付いたが、配列の中に入っているのが、スカラー配列なのか、連想なのかが分からないというデメリットがある(これまで問題になったことはなかった気がするが)
    • フレームワークの豊富さ
      • 例えばRubyフレームワークといえば「Ruby on Rails」だが、PHPは「CakePHP」や「Laravel」、「symfony」などフレームワークが豊富であり、開発の内容(もしくは好み)などに合わせて最も適したものを選ぶことが出来る。ただ、これについてもやはりデメリットが存在する。というのも、そもそもフレームワーク選定にコストが必要なこと、また実際に使うことになった際、多少なりとも学習コストがかかるからである。(Rubyのようにフレームワークがほぼ一つと決まっていると、選定や学習コストを最低限に抑えることが出来る)

 

終わりに

 参照サイトなどを見つつ、自分がこれまで経験したこと等を元にPHPの特徴を書いていきましたが、改めてPHPでも関数の書き方などを見直す機会となりました。今後別の言語などを使っていく機会があれば、その時に改めてこのPHPの特徴などを更新していこうかとかと思います。

 

参照サイト