Swiftでアプリ開発

swift

Appleの開発言語である、Swiftですが、objective-cの後継にあたり、これからiOSのアプリを開発するなら覚えなくてはならない言語になります。

最近、グーグルでAndroidの開発にSwiftが採用されるかもしれない記事がでています。

グーグルの「Swift」採用はあり得るのか、アプリ開発言語を考える

Google、Androidの開発言語としてSwiftにラブコール!?

AndroidでSwiftが採用されたらiOSとAndroidで同じソースで開発コストも低くなり、Android Studio(java)よりも、Swiftがサクサク開発が進むと思う。

それより、IBM BluemixではSwiftが動くようになっています。

iPhone/iPadネイティブ言語のSwiftがIBM Bluemix上で走る衝撃

IBM、Appleのプログラミング言語「Swift」をクラウド対応に

IBMは、Kituraと呼ばれるSwiftのWebアプリケーションフレームワークをオープンソースとして公開しています。SwfitでWebアプリが開発できれば、Rubyなどを勉強しなくていいかも!

EC-CUBE3 オススメプラグイン

EC-CUBE

EC-CUBE3 おすすめプラグインの紹介

スクリーンショット 2016-06-22 17.55.29

株式会社ロックオン さんが作ったおすすめ商品管理プラグインが便利です!

簡単操作で自分のオススメしたい商品を簡単に紹介する事が出来ます。
プラグインの使い方はすごーーーーーーく簡単です!!!!

インストールするだけで、管理画面の左項目のキャッシュ管理の下におすすめ管理って項目がでてくるので
そこの中に入ります。
スクリーンショット 2016-07-06 18.34.00

スクリーンショット 2016-07-06 18.15.49

 

中に入るとオススメ商品を新規登録というボタンが出てくるのでそこから

スクリーンショット 2016-07-06 18.16.08

スクリーンショット 2016-07-06 18.16.19

商品の登録でおすすめに表示したい商品をいれて行くだけです。
これだけで簡単にページに表示する事が出来ます。

あと、ブロックが勝手に生成されるのでそれをレイアウト編集で入れるのを忘れないでくださいね!

 

EC-CUBE3系 on Plesk! Plesk搭載サーバーでEC-CUBE3系を動かしてみる!

20160628-pict01

デジタルドリームワークスから比嘉です。
今回はPleskが搭載されているサーバーへのEC-CUBEのインストールを行ってみました。
composerを利用したインストールもあるようですが、まだ深く理解出来ていないので今回はファイルをアップしてインストールを行いました。

さて、本題です。
Pleskは標準で搭載されているPHPのバージョンが低いため色々と大変です。
こちらの環境では以下のような作業を踏んでとりあえずインストールまでこぎつけました。

1. Pleskへ新しいバージョンのPHPをインストール
2. FastCGIによるセッションパスの変更
3. PDOモジュールを利用可能に設定
4. PHP タイムゾーンの修正

1. Pleskへ新しいバージョンのPHPをインストール

Plesk搭載サーバーはサーバー管理がとても便利でサイト運営しやすいのですが、その分自由度が落ちる部分もあります。
とくにネックとなるのがPHPのバージョンです。
標準のPHPバージョンが低いため動かないシステムもあります。
自力でPHPをバージョンアップするとPleskがエラーを起こすなど難しい部分がありました。
しかしPleskのバージョンも上がり、環境によってはPHPの高いバージョンがインストール出来たり、複数のPHPバージョンを入れることが出来る様になっているみたいです。
今回試してみた環境は、後者の複数のPHPバージョンのインストールが提供されていました。
Pleskバージョンにより違いはあると思いますが、以下の方法でEC-CUBEが動作するバージョンをインストール。

※ 参照 https://kb.plesk.com/jp/125146

色々と記述されていますが、やったことは
サーバー管理「ツールと設定」->Plesk項目「アップデートおよびアップグレード」->「コンポーネントを追加/削除」->「ウェブホスティング機能」よりEC-CUBEの動くバージョンのPHPをインストールするだけです。

これでホスティング設定よりPHPのバージョンを選択出来る様になります。
ただしインストールしたPHPはFastCGIでしか動作しません。
ここからが試行錯誤の始まりでした。

2. FastCGIによるセッションパスの変更

PHPのバージョンもクリアしたので早速EC-CUBE3系をサーバーへアップ、アクセス権を変更してインストール画面にアクセスします。
するとセッションディレクトリが書き込み&読み込み出来ませんとエラーが出ます。

RuntimeException in NativeFileSessionHandler.php line 52:
Session Storage was not able to create directory “/var/lib/php/session”

これはPHPをFastCGIで実行しているため、実行権限がFTPユーザーになるのが理由のようです。
そこでセッションのパス(session.save_path)を変更します。

まずセッションのディレクトリを作成

mkdir /var/www/vhost/domain.tld/private/php_sess
chown [ftpuser]:psacln /var/www/vhost/domain.tld/private/php_sess
chmod 0700 /var/www/vhost/domain.tld/private/php_sess

※ 参照 https://kb.plesk.com/jp/7056

次にセッションパスの変更

通常はphp.iniを修正しても良いのですが、複数ドメイン管理しているので、Plesk上のPHP設定から「session.save_path」を変更します。
apacheを再起動します。

3. PDOモジュールを利用可能に設定

さてセッションの問題もどうにか解決し、インストールステップを踏めるようになりました。
早速ステップを進めていきます。ところがSTEP3でストップ orz.
エラーの文章を読む感じではPDO部分でエラーが発生している様子でした。
そこでphp.iniを確認し、PDOモジュールを読み込み出来る様に設定します。
こちらもPlesk上で行えそうでしたが、他のドメインでも拡張しても問題ないと判断しphp.iniを修正

;extension=php_pdo.dll

extension=php_pdo.dll

apacheを再起動して再度アクセスすると、すぐにSTEP3が表示されてステップが進めません。
どうもインストール時のキャッシュがどこかで保存されている模様です。
これがどうもよく分からず、今回は再度ファイルをアップし直して、最初からインストール手順を進めました。

4 PHP タイムゾーンの修正

さー、これで大丈夫かと思ったのですが、どうも最後のステップ5で動作が強制的に終了して真っ白な画面になります。
エラーログを見る感じ、FastCGIのリクエストが多いことが原因と思いましたが…
最終的には根本的な問題、タイムゾーンを修正していんトール完了!

date.timezone = Asia/Tokyo

20160628-pict02

さてー、記述してしまえばそこまで長い道のりではないですが試行錯誤をしたため数日を要しました。
管理画面へのログインやフロントページ等、特に問題は無さそうですがここまでの道のりを見ると、本番環境で利用するにはもう少し様子を見た方が良さそうです。
間違えている情報やこんなやると簡単など、情報があればぜひコメントをいただけると幸いです。
よろしくお願い致します。

またサーバーの環境により同じやり方でも上手くいかなかったり、設定変更によりサーバー全体に影響を及ぼしたりします。
みなさんバックアップ等、もしくは設定を元に戻せる状態の準備をして、自己責任で慎重に作業を行いましょう。
EC-CUBE3の情報がまだまだ少ないですが、問題解決の糸口になれば…

アメリカンビレッジガイドアプリの紹介ビデオ

 

 
沖縄の観光地である、北谷町美浜にある、リゾートタウン「アメリカンビレッジ」のガイドアプリ紹介ビデオです。
GPS機能を使用して現在地からの周辺ショップが表示されたり、最新イベント情報を知ることができます。日本語、英語、繁体語、簡体語、韓国語の5ケ国に対応しています。アメリカンビレッジ周辺エリアでは無料のWi-Fiが充実していますので、アメリカンビレッジの情報に素早くアクセスできます。iPhone版とAndroid版があります。

EC-CUBE2からEC-CUBE3で変わった事

EC-CUBE

今回は、EC-CUBE2からEC-CUBE3になって変わった事を紹介します。
皆さんもご存知の通りだと思うのですが、EC-CUBE2からEC-CUBE3に大幅アップデートがきましたね。

そこで思った事は、、、、、、

やっぱり最初に気になるのは
EC-CUBE2のSmartyではPHPの直書きが出来てたのがEC-CUBE3ではtwigではPHPが直書きが出来ないので
EC-CUBE2になれてた人はEC−CUBE3になれるのに時間がかかるのでは無いでしょうか。

標準のテーマがレスポンシブ化されている!!

EC-CUBE2ではスマホ用とPC用などディスプレイによって別々に
しなきゃ行けなかったのが一つで対応することができる。
スマートフォンにも対応していて簡易化しているのでスマートフォンから受注の管理などが簡単にできる!!!
ただ、半年たったが現在ダウンロード出来るテーマが少ない!!!テーマが少なすぎる!!(現在2016年6月)
公式から少ないテーマを買って使うか、標準テーマをそのまま使うか、標準テーマをカスタマイズして使うか、1からテーマを作成する
しか使う方法がない!!!
まだ出たばかりなのもあり、もう完成されていてダウンロードできる物が少ないです。カスタマイズしようにも知識が無ければ出来ない事も多く、
全然知識が無い人にはテーマをそのまま使うか選択肢があんまりないテーマをダウンロードして使うしかできないかと思います。

3、プラグインのアップデート

EC-CUBE2では出来なかったプラグインやバージョンのアップグレードがボタン一つ押すだけでアップデート出来るようになった!

 

まだ出たばかりとあってまだまだプラグインも少ないけどこれからどんどん増えてくると思います!
プラグインもEC-CUBE2の中身をちょっとだけ変えただけのものなのかわかりませんがいくつか上手く機能しないものもあり大変だった事もありましたが、
今は無事に使えているので安心してるプラグインもあります(笑)

全然使った事の無いプラグインを使うときはテスト環境でチェックしてから使う事をお勧めします!

私も全然使いこなせて居ないので精進します!

 

 

chatworkでチャチャとチャット

会社のメンバー同士での連絡事項に「chatwork」で管理しています。

PCとスマホ、そしてブラウザでも同じ情報をどこからでも扱えるので、この「chatwork」でいろいろ社内の報告・連絡・相談をやっています。

無料で14チャットルームまでの制約などがありますが、使用して使い勝手がよければ有料プランにアップグレードしたいと考えています。

Mac版のchatwork

chatwork

ブラウザ版のchatwork

chatwork

iOS版のchatwork

chatwork

EC-CUBE3 プラグイン入れ方

eccube

今回はEC-CUBE プラグインの入れ方 自分用メモ、、、、

EC-CUBE公式サイトのトップに飛んで→オーナーズストアの機能カスタマイズ
にいくとプラグインがずらーーーーーっっって並びます。

スクリーンショット 2016-06-22 18.17.25

このように公式プラグインが並びます。
次に入れたいプラグインをクリックして購入するを押すと
スクリーンショット-2016-06-22-18.20.42そして利用するサイトをチェックして購入してください。
その後に自分のEC-CUBEサイトの管理に行って、

サイドバーのオーナーズストア→プラグイン→購入済みプラグインに行くと自分が買ったプラグインがあるのでインストールします。

そうするとブロックを作るプラグインもあれば登録する際に詳細が細かく設定できるプラグインもあるようです。!

 

「WordPress 沖縄」で1番を目指す

 

2016年6月20日現在で、「WordPress 沖縄」をgoogleで検索したらデジタルドリームワークスは4番目でした。これから3ヶ月後に1番になるために本の読んでSEO対策に実践できるかを実施します。

「SEO対策のためのWebライティング実践講座」を参考に、自社サイトをオウンドメディアマーケティングまで活用することを目指します。

googleサーチで1番になることは、もちろんですが技術もデザインも1番になることを心がけます。
wordpress 沖縄

CakePHP2.x リレーションシップ(アソシエーション)のまとめ…

さて表題通り、CakePHPにはモデル間のアソシエーションを定義することでリレーショナルデータベースを構築できます。
CakePHP には4つのアソシエーションが用意されています。hasOne, hasMany, belongsTo, そして hasAndBelongsToMany (HABTM) です。
Cookbookには以下のように説明がされています。

hasOne(1 対 1)
hasMany(1 対 多)
belongsTo(多 対 1)
hasAndBelongsToMany(多 対 多)

言い換えると以下のような感じになる。

hasOne:相手テーブルに、自分テーブル.idの外部キーをもっている(この外部キーはユニークである)
hasMany:相手テーブルに、自分テーブル.idの外部キーをもっている(この外部キーは複数ある)
belongsTo:自テーブルに、相手テーブル.idの外部キーをもっている
hasAndBelongsToMany:中間テーブル テーブル1とテーブル2の情報をもっている

※「hasOne」と「hasMany」の関連性はほぼ同じですが、ユーニークかじゃないかの違いみたいです。

少し具体的な部分をCakePHPのCookbookを見ながら理解を深めていきます。

20160617-pict01


【hasOne】

class User extends AppModel {
    public $hasOne = array(
        'Profile' => array(
            'className' => 'Profile',
            'conditions' => array('Profile.published' => '1'),
            'dependent' => true
        )
    );
}

UserテーブルとProfileテーブルがあります。
Profileテーブルは、1つのUser.id(ユーザーid)を持っていることになります。
hasOneですので、 プロフィール情報は1つユーザーに1つしかない。当たり前ですが、このような関係をhasOneで定義します。

———

20160617-pict02


【hasMany】

class User extends AppModel {
    public $hasMany = array(
        'Comment' => array(
            'className' => 'Comment',
            'foreignKey' => 'user_id',
            'conditions' => array('Comment.status' => '1'),
            'order' => 'Comment.created DESC',
            'limit' => '5',
            'dependent' => true
        )
    );
}

UserテーブルとCommentテーブルがあります。
Commentテーブルは、ユーザーid情報を持っています。Commentテーブルには同じユーザーidを持っているレコードが複数存在します。
1ユーザーが複数のコメントを投稿出来るため、ユーザーとコメントの関連性はhasManyで定義することになります。

———

20160617-pict03


【belongsTo】

class Profile extends AppModel {
    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'
        )
    );
}

さてbelongsToの定義です。
先ほどhasOneの定義で、UserモデルからProfileモデルにアクセスできるようになりました。
視点を逆にしてみます。プロフィールテーブルにはユーザーid(外部キー)を含んでいるため、Userテーブルに属しているということになります。
その場合にProfileテーブルは、UserテーブルとbelongsToの関係で定義することになります。

———

20160617-pict04


【hasAndBelongsToMany (HABTM)】

class Recipe extends AppModel {
    public $hasAndBelongsToMany = array(
        'Ingredient' =>
            array(
                'className' => 'Ingredient',
                'joinTable' => 'ingredients_recipes',
                'foreignKey' => 'recipe_id',
                'associationForeignKey' => 'ingredient_id',
                'unique' => true,
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'finderQuery' => '',
                'with' => ''
            )
    );
}

最後にhasAndBelongsToManyです。こちらは中間テーブルとなります。
上記を例にすると、Recipeテーブル、Ingredientテーブルがあり、それをRecipe_Ingredientで紐づけるイメージです。

ということでCakePHP2.xのアソシエーションについてメモしました。
皆さんもご存知の通りすでにCakePHPは3系がリリースされています。
自分はこれから3系についても勉強をしていきますが、ファイル構成を眺めただけでも大分2系とは違いがありそうです。
ですがきっとこれまで勉強していた2系がベースとして役立つと思います。
新しい技術習得に努めていきたいと思います。

間違っていることや分かりやすい考え方、3系での違い等の情報があれば、ぜひコメントを残していただけると嬉しいです。
よろしくお願い致します。m(_ _)m

EC-CUBEでループカウント

eccube

EC-CUBE の自分用メモです。

wordpressなどPHPを触る時に3個の記事ごとにこのコードを記述するなどif文で書く事が良くありますよね?
EC-CUBEでも同じ感じで使う事が出来ます。

<div id=”item_list”>
<div class=”row no-padding”>
{% for Product in pagination %}
<div id=”result_list_box–{{ Product.id }}” class=”col-sm-3 col-xs-6″>
<div id=”result_list__item–{{ Product.id }}” class=”product_item”>
<a href=”{{ url(‘product_detail’, {‘id’: Product.id}) }}“>
<div id=”result_list__image–{{ Product.id }}” class=”item_photo”>
<img src=”{{ app.config.image_save_urlpath }}/{{ Product.main_list_image|no_image_product }}“>
</div>
<dl id=”result_list__detail–{{ Product.id }}“>
<dt id=”result_list__name–{{ Product.id }}” class=”item_name”>{{ Product.name }}</dt>
{% if Product.description_list %}
<dd id=”result_list__description_list–{{ Product.id }}” class=”item_comment”>{{ Product.description_list|raw|nl2br }}</dd>
{% endif %}
{% if Product.hasProductClass %}
{% if Product.getPrice02Min == Product.getPrice02Max %}
<dd id=”result_list__price02_inc_tax–{{ Product.id }}” class=”item_price”>
{{ Product.getPrice02IncTaxMin|price }}
</dd>
{% else %}
<dd id=”result_list__price02_inc_tax–{{ Product.id }}” class=”item_price”>
{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}
</dd>
 {% endif %}
{% else %}
<dd id=”result_list__price02_inc_tax–{{ Product.id }}” class=”item_price”>{{ Product.getPrice02IncTaxMin|price }}</dd>
{% endif %}
</dl>
</a>
</div>
</div>
{% endfor %}
</div>

</div>

(これはデフォルトのlist.twig から抜粋してます。)

これだけの記述だとそれぞれの高さが違ったり3カラムで記事を並べる際に4個目がくると上に詰めますよね?

そういう時に3個並んで4個目にはclear:both を挟んだりしたい場合に結構やくにたちます。

{% if loop.index %2==0 %}
表示させたいコード
{% endif %}

このコードをループの一番下に記述してください。

{% endfor %}のすぐ上に追加です。

%2と記述されてる所に何番目になので2の数字を変える事で4番目、5番目と変える事が出来ます。