開発ブログ

EC2のGCC最適化

2016-09-23 19:43

こんにちは。エンジニアの齋藤です。今回は、前回メモした、

メモ:gccの最適化オプション。今後コンパイルする時にテスト。

についてちょっと書いてみようかと思います。
まずGCCですが、これはGnu Compiler Collection(Gnu C Compiler)の略です。
GNUというプロジェクトが作った、色々な言語のソースコードを、CPUが実行できるようにコンパイルしてくれるものです。
ソースからインストールする時のmakeコマンドで動いてるヤツです。

そして、このGCCの最適化オプションを使うとどうなるかですが、CPUに合わせてコンパイルするので、できあがったバイナリの実行速度が速くなります。

実際には、configureの前に、

というコマンドを実行しています。

この2つのコマンドですが、それぞれ
CFLAGS → Cコンパイラの引数
CXXFLAGS → C++コンパイラの引数

さらにそのオプションで、
-O2 → 最適化レベル。7段階ありますが、2が推奨のレベルです。
-march=native → micro architecture。CPUに合わせたものを指定します。nativeだと自動的にそのCPUに合わせたものにしてくれます。
-pipe → コンパイル時間を短縮してくれます。作成されるバイナリには特に影響ありません。
という感じです。
ここらへんはGCCの最適化 – Gentoo Wikiが詳しく解説してくれています。

問題は、CPUに合わせて最適化させるので、他のCPUが違うサーバにバイナリを持って行った時に動かなくなったりします。
Amazon EC2では、インスタンスタイプが違えばCPUも違うので、インスタンスを変更したりした時に動かなくなりそうな懸念があります。
なので少し調べてみました。

t1.micro Xeon E5-2670 v2 march=core-avx-i
t2.nano Xeon E5-2676 v3 march=core2
t2.micro Xeon E5-2676 v3 march=core-avx2
t2.small Xeon E5-2676 v3 march=core-avx2
t2.small (昔に作ったもの) Xeon E5-2670 v2 march=core-avx-i
t2.medium Xeon E5-2676 v3 march=core-avx2
m1.small Xeon E5-2651 v2 march=core-avx-i
m1.small (昔に作ったもの) Xeon E5-2650 0 march=corei7-avx
m3.medium Xeon E5-2670 v2 march=core-avx-i
m3.large Xeon E5-2670 v2 march=core-avx-i
m4.large Xeon E5-2676 v3 march=core-avx2
c4.large Xeon E5-2666 v3 march=core2

と、どれもバラバラな結果ですが、とりあえず最新世代はHaswellになっていました。
ただ、それでもmarchはnativeでcore-avx2にはならないようです。
一応、最新世代ならGCCコマンドで-march=core-avx2と指定した時でもエラーにはならなかったので、おそらく大丈夫だとは思います…多分…
もし試す方がいたら自己責任でお願いします…

WordPressサイトのAMP対応

2016-09-16 15:52

こんにちは。開発担当の萩原です。

以前からAMPが話題になっておりますが、
対応方法やAMP_HTMLについての情報はたくさん公開されておりますので、
AMP_HTMLの基本的な文法や仕様などの部分は割愛させていただきまして、
今回はWordPressサイトのAMP対応について書かせていただきたいと思います。

その方法ですが、WordPressを制作したAutomattic社が公開している「AMP」という
プラグインをダウンロードしてきて管理画面から有効化するだけです。
※この記事時点でのプラグインのバージョンは0.3.3です

そうしますと既存のページのURL末尾に「/amp/」か「?amp=1」を追加してアクセスすると
AMP対応したページが表示されます。

これでAMP対応はできるのですが、このプラグインの仕組みとしては、
AMP用のURLへのリクエストがあったら、
このプラグイン内に持っているAMP用のテーマに切り替えて表示するという
感じになっておりまして、
このプラグインでAMP対応したサイトの見た目はどのサイトもほぼ同じになってしまいます。
もしくは、プラグイン内のテーマを自分で変更する方法もありますが、
プラグインをアップデートするたびに、そのテーマを変更し直さなければなりません。
また、この状態ではGoogleAnalyticsのタグも入っていません。

そのような状態ではAMP対応できても意味がないと思う方もいらっしゃると思いますので、
・WordPressサイトをAMP対応して、AMP用のテーマをプラグインの外で管理する方法
・WordPressサイトをAMP対応して、GoogleAnalyticsのタグを入れる方法
を紹介させていただきます。

WordPressサイトをAMP対応して、AMP用のテーマをプラグインの外で管理する方法

AMPプラグインの「templates」ディレクトリを、
使用しているテーマのディレクトリに「amp_templates」という名前でコピーしてください。
そしてそのテーマのfunctions.phpに以下の記述を追加してください。

「amp_post_template_dir」のフィルタを使ってテンプレートディレクトリを変更することで、
amp_templates内のテンプレートファイルを読み込むようになりますので、
プラグイン内のテンプレートファイルを書き換えなくて良くなります。
※「amp_templates」は任意の名前で結構です

WordPressサイトをAMP対応して、GoogleAnalyticsのタグを入れる方法

使用しているテーマのfunctions.phpに以下の記述を追加してください。

「amp_post_template_analytics」のフィルタを使って、GoogleAnalyticsの情報をセットします。
「account」には任意のトラッキングIDを入れてください。

最後に

このプラグインでは「投稿ページ」しかAMP対応しないのですが、
「固定ページ」もAMP対応する方法です。
この方法はプラグインファイルを変更するのであまりお勧めはできませんが、
どうしても対応させたい場合は、

AMPプラグイン内のamp.phpの40行目あたりの

に変更すると固定ページもAMP対応の対象となります。

以上となります。ご参考になりましたら幸いです。

Eloquentのちょっと進んだ使い方

2016-09-12 16:28

先日はLaravelのORマッパーであるEloquentを単独でライブラリとして利用する方法について説明させていただきました。

今回は実際にEloquentを使ってモデルを作っていきながら、簡単な保存メソッドや取得メソッド、カスタムコレクションや、スコープ機能、リレーションの構築、Eager Loadingなど、Eloquentの基本的な使い方について説明をしていきたいと思います。

なお、Eloquentの公式マニュアルはこちら
日本語のマニュアルもありますが、英語のほうがマニュアルとしては使いやすかったです。
また、マニュアルには書かれていない便利なメソッドなどがあったりするので、
EloquentのAPIレファレンスも見ながら開発していくといいと思います。

前回に引き続き”MyLib”というライブラリを開発するという前提で話を進めます。

>>続きを読む

Eloquentをライブラリとして使ってみた(Laravel ORM)

2016-08-31 18:48

先日のエントリーではPHPのORマッパーの簡単な比較と、LaravelのORMである”Eloquent”の特徴をまとめてみました。

今日はEloquentのライブラリとしての使用方法についてまとめてみたいと思います。

githubにはLaravelのEloquentを含むデータベース関連のライブラリが公開されています。

The Illuminate Database component is a full database toolkit for PHP, providing an expressive query builder, ActiveRecord style ORM, and schema builder. It currently supports MySQL, Postgres, SQL Server, and SQLite. It also serves as the database layer of the Laravel PHP framework.

翻訳すると、「イルミネートデータベースコンポーネントはクエリビルダー、アクティブレコードのスタイルのORM、スキーマビルダーを提供するデータベースのPHPツールキットです。現在はMySQL、Postgres、SQL Server、SQLiteをサポートしています。このコンポーネントはLaravel PHP フレームワークのデータベースレイヤーとしても機能を提供しています。」とのことです。

“Illuminate”というのはLaravel本体やLaravel関連のコンポーネントを開発しているgithub上の集団と理解してくれれば良いと思います。Eloquentは狭義では”Illuminate/database”コンポーネントの”Active Record Style ORM”にあたります。ただし、Eloquentがクエリビルダーのクラスをカプセル化しているので、プログラマーはEloquentを通して意識することなく、”Illuminate/database”コンポーネントの機能を活用することができます。

またMongoDBにも対応し始めているそうなので、NoSQLな方もお使いいただけるかもしれません。

それではEloquentライブラリのインストール方法と使い方について見ていきたいと思います。

>>続きを読む

PHPのORM比較: LaravelのORマッパー(Eloquent)の特徴

2016-08-24 15:09

最近とあるアプリケーションのライブラリを作成するプロジェクトがありまして、スクラッチで書いていたのですが、DB接続やSQLまわりが煩雑になり、やっぱりORMが欲しいなぁと探していたところ、今アツイと言われているPHPフレームワークの”Laravel”のORマッパーである”Eloquent”を見つけました。(こちらの記事で紹介されています)

フレームワークなのに、ORマッパーだけを独立して使うことができるようです。

今回はDoctrine、Idiorm&Paris、EloquentなどのPHP製のORMを比較し、Eloquentの特徴や使用感をご紹介したいと思います。

>>続きを読む

2 / 512345