Quantcast
Channel: 漢ムラタ –福岡のホームページ制作会社・メディア総研株式会社 マグネッツ事業部
Viewing all 33 articles
Browse latest View live

jQueryを使ってSVGファイルを文字を書くようなアニメーションで表示させる方法

$
0
0

こんにちは、もうすぐサンタ狩りの季節ですね。今年も狩り最前線確定のムラタです。

今回はjQueryを使って文字を書いていくようなアニメーションを実装してみたいと思います。

実装サンプル

まず、準備するものとしてSVGファイルというファイルを用意します。
SVGってなんぞやってなる人が多いと思いますが、「Scalable Vector Graphics(スケーラブル・ベクター・グラフィックス)」の略で、XMLをベースにした2次元ベクターイメージ用の画像形式の1つということらしいです。

詳しいことは自分も説明できませんが、ブラウザ上で画像として出力したりハイパーリンクを埋め込んだりcssで色変えたり背景にしたりできるのが特徴です。ベクターイメージなので当然拡大縮小しても画像の劣化もおきないということですね。

目次

SVGファイルを作成

それでは早速SVGを用意してみましょう。

01

SVGファイルはイラストレーターで作成します。
テキストをアウトライン化したら「別名で保存」→「ファイルの種類」を「SVG」として保存します。

02

保存の際のオプションはSVGプロファイルが「SVG1.1」、フォントの種類を「SVG」とします。要はデフォルトの状態でOKということです。

アニメーションの設定

これでSVGの準備はできました、次はこのSVGにアニメーションを設定していきます。
SVGのアニメーションを自動で生成してくれる「LAZY LINE PAINTER」というサイトがありますのでそれを利用しましょう。

サイトの最後の方に「SVG TO LAZY LINE CONVERTER」という箇所があるので、そこにSVGファイルをドロップするかクリックしてファイルを選択します。
※アップできるSVGファイルは横1000px以内、ファイルサイズ40KB以内らしいです。

03

アップが完了して少し待つと実際のアニメーションをプレビューで確認できたり、線の色の変更などを行えます。

問題なければ「Copy data to clipboard」をクリックしてソースコードをコピーして、新規にjavascriptファイルを作成してそこにペーストしておきます。

また、ページの最初の方にある「DOWNLOAD FROM GITHUB」のリンクから「jquery.lazylinepainter」も合わせてダウンロードしておきましょう。

実装

それでは実際にhtmlファイルに組み込んでみましょう。

必要なファイルは「jquery本体」と、先ほどコピーしたソースコードのjsファイル(仮にsvg.jsとします)、それとダウンロードしたzipファイルの中にある「jquery.lazylinepainter-1.4.1.js」とvendorフォルダ内にある「raphael-min.js」のふたつ。合計4つのファイルになります。

これらのjsファイルを読み込みます。

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SVGアニメーション</title>
<link href="style.css" rel="stylesheet" media="all">
<script src="jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="raphael-min.js" type="text/javascript"></script>
<script src="jquery.lazylinepainter-1.4.1.js" type="text/javascript"></script>
<script src="svg.js" type="text/javascript"></script>
</head>
<body>
<div id="text"></div>
</body>
</html>

こんな感じです。
アニメーションを出力させる箇所「<div id=”text”></div>」の部分はSVGアニメーションを設定した時に生成されたソースコード内の最後のほうに、「 Setup and Paint your lazyline! 」という箇所があるのでそこを確認してください。

/* 
 Setup and Paint your lazyline! 
 */ 
 
 $(document).ready(function(){ 
 $('#text').lazylinepainter( 
 {
    "svgData": pathObj,
    "strokeWidth": 2,
    "strokeColor": "#e09b99"
}).lazylinepainter('paint'); 
 });

恐らくアップしたSVGファイルの名前がIDになっているんだと思います。

04ちなみにここに記述してある「strokeWidth」で線の幅を、「strokeColor」で線の色を変更することができます。

他にも指定できるオプションとして「width」「height」「strokeCap」「strokeJoin」「strokeOpacity」「strokeDash」「onComplete」「delay」「overridekey」などがあるようです。

「width」と「height」は出力させるアニメーションの幅と高さではなく、出力させる囲みの幅と高さみたいです。ちょっと用途が分からないですね・・・。

「strokeCap」は調べた限りでは線の終端部を丸ませるか角にするかみたいな設定でしょうか?自分が試した限りでは特に変化は見られませんでした。
値として「round(デフォルト値)」「square」「project」の3つあるようです。

「strokeJoin」は線と線がつながる接続部分の形を角にするか丸くするかみたいな設定みたいです。ちなみにこちらも確認することはできませんでした・・・。
値は「mitter」「bevel」「round(デフォルト値)」の3つ?

06
「strokeOpacity」は透明度を変更することができます。
値は0~1の間で設定します。デフォルト値は1です。

05
「strokeDash」は線の種類を変更できます。指定する値は「-」「–」「-.」「–..」などです。デフォルト値は「null」となっています。

「onComplete」は分かる人にはすぐ分かりますね。アニメーション処理が終わったタイミングで実行されます。例えばアニメーションが終わった後に線画ではなく塗りが入った画像にフェードで差し替えるみたいなことも出来そうですね。

$(document).ready(function(){ 
 $('#text').lazylinepainter( 
 {
    "svgData": pathObj,
    "strokeWidth": 1,
    "strokeColor": "#e09b99",
	"onComplete": function(){
		alert("アニメーション完了");
	}
}).lazylinepainter('paint'); 
 });

「delay」はアニメーションが開始されるまでの待機時間です。そのまんまですね。

07
最後の「overrideKey」ですが、本来このlazylinepainterは生成されたオブジェクトのキーと指定したセレクタのID名が一緒でなければ動きませんが、オプションだけ変えて同じページ内に複数表示させたい時などにこれを指定することで表示が可能になります。

ちなみにキーはペーストしたコードの最初のほうにあります。

最後に

いかがだったでしょうか?

わりと簡単に実装できるし問題児のIEちゃんも7からでもちゃんと動きますので、ちょっとしたアクセントとして使ってみるのも面白いのではないでしょうか?

実装サンプル


会社の人をクリスマスパーティーに招待してみた

$
0
0

こんにちは、漢ムラタです。

今年もやって来ましたね・・・

そう、サンタ狩りクリスマスの時期です。

みなさんはどういったクリスマスを過ごす予定でしょうか?

仕事でそれどころじゃない人や恋人と一緒にクソみたいに人の多いところでクソみたいに高い料理をむさぼってクソみたいな素敵な時間を過ごす人もいるでしょう。

当然リア充な私もクリスマスは画面の中の恋人と一緒に過ごす予定ですが、今年はそれをグッと我慢して、どうせ1人で過ごすであろう非リア充の会社の人たちリア充の私が主催のクリスマスパーティーに呼んであげて、日頃彼らが味わう事のないリア充感を大いに楽しんでもらおうと思います。

目次

  1. 序章「宴への誘い」
  2. 第一章「構築機械」
  3. 第ニ章「君と私の間に交わされる言葉」
  4. 最終章「孤人の星」

序章「宴への誘い」

20141224-05

まずは非リア充のスタッフ達にお誘いのメールを出すにあたって、メールの文面のみだと素っ気ないのでちょっとしたクリスマスにちなんだイラストなんかも描いて添付することにします。

こうすることで楽しそうな感じを演出でき、引っ込み思案なスタッフたちも参加しやすくなるはずですね。

この辺の気づかいがリア充たる所以です。

20141224-06

線画は「CLIP STUDIO PAINT PRO」を使い、塗りは「Photoshop CC」で、休みの日も使って描きあげました。

背景のどぎつい黄色が明るい感じを出してていい感じですね。

「クリスマスおめでとう。ぜひ来てください」と要件を簡素かつストレートに伝え、テキストツールを使わずに手書きにすることで親しみやすさも演出しています。
ちなみに「CLIP STUDIO PAINT PRO」はこの日のためにわざわざ購入しました。

これだけ手の込んだことをすればスタッフのみんなもきてくれることでしょう。

第一章「構築機械」

メールを出した当日、マグネッツのディレクションニキことカツゲさんに呼び出されました。賞賛のお言葉でしょうか。

20141224-01

話というのは他でもない、お前が送ってきたクリスマスのお誘いについてじゃ・・・

お前が柄にもないクリスマスパーティーをしようとバイクでツーリングや博多湾で釣れもしないエギングをしようと、そんなことに口出ししとうない。

しかし・・・

しかしじゃ!

給料倍増の要求をしてから(※していません)のお前は・・・

な、

なにか道を踏み外しているような気がするんじゃ!

20141224-02

以前のお前に戻ってくれんか!

孤人の星を目指し(※目指していません)

まっしぐらに突き進んでいたあの姿!

あの姿なくしてお前の進むべき道がどこにあるんじゃ!

仕事に立ち向かった時のキーボードを壊してしまいかねないあの気迫はどこへいった!!

構築(コーディング)以外何もいらん

構築(コーディング)ロボットとして生きると誓った(※誓っていません)

漢ムラタはどこにいった!!

20141224-03

「何がクリスマスじゃあい!!!!!!!!!!!」

20141224-04





第二章「君と私の間に交わされる言葉」

構築ロボットという思いもよらぬ言葉に若干の動揺を覚えつつも、ついにクリスマスパーティー当日に。

20141224-21

構築ロボットとしての私を期待しているカツゲさんは恐らく来ないでしょうがまだ非リア充のスタッフはたくさんいます。

きっと楽しいパーティーになるはずです。

20141224-22

20141224-23

20141224-27








「ピロン♪」

20141224-27

「社長の野本さんとリーダーのかわさきさんからメールだ・・・」

20141224-26

来年はこの野本

命ばかけて大口の仕事をとってきてみせますばい!

パーティーはそれからでん遅くなか!

20141224-10

メリークリスマス!

こんな言葉は無用だ!

君と私との間に交わされる言葉はこれのみ!

残業!!(※マグネッツは無理な残業はしないホワイトな会社です)

20141224-08

「・・・・・」






「ピロン♪」

20141224-11

「他のスタッフからだ!」

20141224-25

「旦那だ・・・

旦那さんの手前これないんだ・・・

どうせ家で独身の俺のことをこき下ろしてるに違いない!」

20141224-12





20141224-13

「結局誰も来なかったということか・・・」

最終章「孤人の星」

20141224-14

フハハ・・・

誰も来なかった。それは当たり前だ

クリスマスは人間同士でやるものだ。

貴様がこれほどの支度をして待った。

しかし誰も来ない。

それはみんなが貴様を構築(コーディング)ロボットということを知っていたからだ

ロボットはクリスマスはやらん!

20141224-07

なんならどうだ?

ロボットはロボット同士

俺とやらんか?

メリークリスマス!!

さぁ構築(コーディング)以外何もできない(※できます)

構築(コーディング)ロボットのため乾杯だ!!

20141224-15

20141224-16

20141224-17

ちくしょう!

こんなもの!!

ちくしょう!!

ちくしょう!!

誰が貴様なんかと!

20141224-18

貴様なんか・・・

貴様なんか会社に来たら・・・

叩きだしてやる!叩きだしてやるぞ!!(※マグネッツはお客様を叩きだしたりしておりません。安心してご来社ください。)

20141224-19

畜生・・・

俺は人間なんだ・・・

人間なんだぞ・・・!!






20141224-20

ち く し ょ う ・ ・ ・






20141224-24

この話は一部フィクションです。

なんのことかさっぱり分からなかった方は「巨人の星 クリスマス」でググってください。

私は仕事ですがみなさんは良いクリスマスをお過ごしください。

ウェブデザイン技能検定について

$
0
0

こんにちは、春まで寝ていたいデザイナーのムラタです。

突然ですが皆さんはどんな資格をお持ちでしょうか?
資格にはメジャーなものだと漢検や英検、色彩検定、民間資格を含めると九州観光マスター検定というものまで多岐にわたって色々な資格があります。

今回はそんな資格の中でもwebに関する資格のひとつ「ウェブデザイン技能検定」についてご紹介しようと思います。

目次

  1. ウェブデザイン技能検定って?
  2. 受検申請の流れ
  3. 試験対策
  4. 当日の流れ
  5. 合格発表
  6. 最期に

ウェブデザイン技能検定って?

murata20150305-3

そのまんまですが、webサイトのデザイン(設計)を行う知識と技能を検定するもので、webに関する資格で唯一の「国家資格」となっています。(2015年現在)

国家資格とは

国家資格とは、国の法律に基づいて、各種分野における個人の能力、知識が判定され、特定の職業に従事すると証明される資格。法律によって一定の社会的地位が保証されるので、社会からの信頼性は高い。

文部科学省HPより

国家資格を取得することで、一般的に就職や転職の際に有利となることが多く、収入アップやキャリアアップなどにも繋がりやすくなります。

国家資格には4つの分類がありウェブデザイン技能検定は「名称独占資格」になります。

  • 業務独占資格…弁護士、公認会計士、司法書士など有資格者以外が携わることを禁じされている業務を独占して行うことができる資格。
  • 名称独占資格…栄養士や保育士など、有資格者以外はその名称を名乗ることを認められていない資格。
    ちなみにウェブデザイン技能検定に合格した人は「ウェブデザイン技能士」を名乗ることが可能になり、名刺・ホームページ等に記載してドヤることが可能となるようです。
    ただし、その際は「1級ウェブデザイン技能士」「2級ウェブデザイン技能士」のように自身の等級を必ず明示する必要があります。
  • 設置義務資格…職業訓練指導員や衛生管理者など特定の業務を行う際に法律で設置が義務付けられている資格。
  • 技能検定…業務知識や技能などを評価するもの。

受検資格

ウェブデザイン技能検定は「学科試験」と「実技試験」の2部構成となっていて、受検するにあたって級ごとに以下のような条件があるのでよく確認してから受検するようにしましょう。

【3級】

  • webの作成や運営に関する業務に従事している者及び従事しようとしている者
3級はこれだけです。
web業界で働いている人、これから働きたいと思っている人なら誰でも受検可能です。

【2級】

  • 2年以上の実務経験を有する者
  • 職業高校、短大、高専、高校専攻科、専修学校、各種学校卒業又は普通職業訓練修了した者
  • 大学を卒業した者
  • 高度職業訓練を修了した者
  • 3級の技能検定に合格した者

ここでいう実務経験とはwebの作成や運営に関する業務に携わった経験のことです。

3級に比べて色々と条件がありますがこの内のどれか1つでも満たしていれば問題ないのでまだ比較的受検のハードルは低いと思います。

【1級】

  • 7年以上の実務経験を有する者
  • 職業高校、短大、高専、高校専攻科、専修学校、各種学校卒業又は普通職業訓練修了後、5年以上の実務経験を有する者
  • 大学卒業後、3年以上の実務経験を有する者
  • 高度職業訓練修了後、1年以上の実務経験を有する者
  • 2級の技能検定に合格した者であって、その後2年以上の実務経験を有する者

最期の1級に関してはどの条件にも年数に違いはあるものの、必ず実務経験を有している必要があります。

また1級の実技試験は1級の学科試験に合格した者だけが受験できるようです。

実施地区

検定が実施される地区は等級によって異なり、3級の場合は北は北海道から南は沖縄までありますが、等級が上がるごとに実施地区は狭まり、1級ともなると東京と大阪の2箇所のみとなります。※ただし学科のみ福岡でも実施されます。

  • 1級実技…東京、大阪
  • 1級学科…東京、大阪、福岡
  • 2級…北海道、宮城、埼玉、東京、神奈川、愛知、大阪、岡山、福岡、沖縄
  • 3級…北海道、宮城、埼玉、東京、神奈川、石川、愛知、大阪、岡山、福岡、佐賀、鹿児島、沖縄

ただ、これらの地区は団体受験の場合や今後の受検者数の状況に応じて変動していくようです。

その他詳しい概要は下記のHPよりご確認ください。

受検申請の流れ

murata20150305-5

では次に受検方法やその後の流れをご紹介したいと思います。

まず自分が受検する等級の実施日と実施地区を確認します。ちなみに年度の内、検定は4回実施されます。
平成27年度の試験日程は

第1回(2級・3級)…5月24日(日)
第2回(2級・3級)…8月30日(日)
第3回(1級学科・2級・3級)…11月29日(日)
第4回(1級実技・2級・3級)…2月21日(日)

となっています。
1級の実技と学科だけはそれぞれ年に1度しかないので要注意です。

受検する日程が決まったら早速受検申請を行ないましょう。

受験申請にはネット上からの申請の他、インターネットスキル認定普及協会宛に申請書を送付することでも可能です。

ネット申請の流れは

  1. 事前登録(基本情報登録)
  2. 受検申請(受検級選択・免除申請・受検資格申請等)
  3. 決済方法選択(コンビニ・ゆうちょATM・銀行振込から選択)
  4. 申込み後3日以内(ただし受検申請期限直前は期限当日まで)に入金

という流れになります。入金だけは申込み後3日以内となるので忘れないように気をつけましょう。

受検にかかる料金ですが、3級が学科・実技ともに5,000円で合計10,000円
2級が学科6,000円、実技12,500円の合計18,500円となぜか実技の値段が跳ね上がります。

1級に至っては学科7,000円、実技25,000円の合計32,000円です。1級は実施地区も東京大阪に限られるため人によってはこれにさらに交通費が上乗せされ凄いことになりそうですね・・・。

決済が完了するとメールにて決済情報が届きます。
内容に間違いがないか確認して問題なければ後は受検票が自宅に届くまで待ちましょう。

受検票はだいたい受検日の2週間前くらいで届くみたいです。

murata20150305

このような封筒で受検票が届くので、日付と時間、試験会場などの確認を必ずしておきましょう。

試験対策

murata20150227-02

では合格に向けてどういった勉強をすれば良いのでしょうか。

ウェブデザイン技能検定は2007年に始まり、他の検定に比べれまだ認知度も高くないので参考書も少ないです。

ただ、ウェブデザイン技能検定HPには過去3回に出題された問題と答えが閲覧可能で、やっておいて損はないのでひと通りこれらの問題を解いておきましょう。

ただし答えは書いてあってもそれに対する解説などは一切かかれていないので答えにたいする理解度は低く、毎回ネット等で詳細を調べる手間もかかります。

インターネットスキル認定普及協会が推薦する問題集だときちんと答えに対する解説まで掲載されているので、過去問と問題集を併せて勉強するのがベストだと思います。

ちなみに実技は過去問を見ると分かると思いますが、毎回ほとんど同じような内容が出題されています。

実技が不安な方は過去問を何度か繰り返ししてスムーズに作業できるようになればほぼ問題無いかと思います。

学科の方はある程度過去問がそのまま出題されることもありますが、出題範囲が広く、インターネットにおける最新動向についても知っておく必要があるので、過去問全て解くだけでなく最新の情報についてもある程度知識を深めておくといいと思います。

個人的にここはもっと勉強しておくんだったなと思ったのはCSSでカラー指定する際の16進数カラーコードです。

当然全てのカラーコードを覚えるなんてことは絶対に不可能なので、「黒…#000000」「白…#FFFFFF」「赤…#F00」「青…#00F」「黃…#FF0」あたりを抑えておけば良いと思います。

というのも、自分が2級を受けた際に答えとなるカラーコードが分かっていてもどれがその色か分からず勘で答えるハメになった問題が2問もあったので…

また同じ問題がでるとは限りませんが、覚えておいて損はないはずです。

 当日の流れ

murata20150227-01

持参品

福岡以外ではどうなのか知りませんが、自分が3級と2級を受けた限りでは試験は午前中が学科で午後から実技となっているので、早めに起きて頭をスッキリさせてから臨むといいですね。

また忘れ物がないように最終チェックもしておきましょう。

必ず必要となるものは下記の通りです。

  • 受検票…絶対に忘れないようにしましょう。
  • 身分証明証…次のうちのいずれか1つ、自己を証明する写真付きのもの
    1.運転免許証
    2.パスポート
    3.学生証
    4.社員証
    5.その他公共機関発行の顔写真付身分証
  • 筆記用具…HBの鉛筆またはシャープペンシル、消しゴム。実技しか受けないという人も必要なので注意。

また、これは実施する会場にもよりますが、学科が終わった後に周りに食事をとれるお店が無い、もしくは少し会場から離れないといけないので戻りの時間が不安ということがあります。

そういった場合空腹のまま実技を受けることになり、実技に集中できず、本来の力を発揮できない可能性もあります。

そうならないためにもカロリーメイトやウィダーインゼリーなど手軽にお腹に入れられるものを用意しておくといいですね。

現に私が受けた際に前の席の人から頻繁にお腹の鳴る音が聞こえていて、作業に集中しづらそうにしていました。

※ただし会場内での飲食が可能かどうかなど事前に調べておきましょう。

移動

車での来場は止めてなるべく公共の交通機関を利用するのがいいです。

もし車で来て適当な駐車場がなく違法駐車でもしてそれが発覚した場合は受検を取り消されることもあるようです。

試験開始1時間前から受付が始まるので余裕を持って家を出るようにしましょう。

会場

受ける級によって会場は変わりますが毎回一緒なのかどうかは分かりません。

自分が3級を受けた時は「純真学園」で2級は「アクロス福岡」でした。
最寄りの駅やバス停からどれくらいかかる下調べしておきましょう。

学科受付

学科の開始は10:30からですがその1時間前の9:30より受付が始まります。

会場の試験官に受検票と身分証明証を渡して受付を済ませたら、自分の名前と受験番号が書いてある机に着席して試験の説明が始まるまで勉強するなりして静かに待ちます。

この時間にトイレを先に済ませておくといいでしょう。

机の上には受検票と筆記用具(鉛筆又はシャープペンシル、消しゴム)のみ置きます。それ以外の荷物は机の下に置くなりして、近くの席の人の邪魔にならないようにしてください。

あと当然ですが必ず携帯電話の電源は切っておきましょう。

学科試験説明

試験開始30分前になると試験官による試験説明が始まるのでよく聞いておきしょう。

答案用紙と問題用紙が配られたら試験官の指示で答案用紙に名前と受検票番号を記入します。間違っても先に問題用紙を開いてしまわないように注意します。

学科試験開始

時間になると試験官の合図とともに試験開始です。
学科試験の時間は1時間となっています。

試験はマークシート方式なので1~4の中から該当する番号を大きくはみ出さないように気をつけて塗りつぶしましょう。

問1~15までが質問に対して正しければ「1」間違っていれば「2」を選択する内容で。問16以降は1~4の答えの中から適切なものを選択する内容になっています。(今後変わる可能性もありますが)

試験は開始から30分経過すると退出することができますが、一度退出すると再入場はできなくなるので最期にもう一度答案にズレがないかを確認して答案用紙のみを残して退出します。問題用紙は持って帰りましょう。

ちなみに試験終了10分前になるとまた退出できなくなります。

学科終了から次の実技受付開始まで30分しかないので、早めに退出できた人は会場付近で昼食を取りつつ先ほどの学科試験の自己採点を行ったり次の実技に向けておさらいするのもいいと思います。

実技受付

試験開始45分前になると今度は実技試験の受付が始まります。

学科で既に受付を済ませている人ももう一度受付をする必要がありますので受検票を準備しておきましょう。

受付を済ませると学科と同じく自分の名前と受験番号が書かれている席に着席しますが、学科の時と席が変わっている場合があるのでちゃんと確認しましょう。

用意されているPCですが、試験会場によるらしく自分が3級の時はデスクトップPCだったのですが、2級の時はノートPCでした。

このノートPCというのが意外とくせもので、普段デスクトップしか触らない自分にはキーの配置が異なるというだけで非常にやりづらく、打ち間違えなどもあり普段より作業スピードが著しく落ちる結果となってしまいました。

これは気をつけてどうにかなる問題ではないのでどうしようもないですが、もし普段自分が使用しているPCはとは違うタイプものを使用しないとならない場合は、せめて慌てず打ち間違えの無いように慎重に作業するといいでしょう。

当然ですが試験開始まではPCを操作してはいけないので待ち時間に少しでも触って慣れておこうとかそういうマネはしないようにしましょう。

 実技試験説明

学科と同じく試験開始30分前から説明が始まります。

机の上に受検票や筆記用具しか置けないなどの説明は一緒ですが、実技では試験で使用するPCの点検作業が追加されます。

問題用紙の前に「設備点検表および実技試験課題選択表」という用紙が配られます。(実技試験課題選択表は3級にあったかどうか記憶があやふやですが…)

配られた用紙には「モニターが正常に写るか」「マウスが動くか」「キーボードが正常に打てるか」などのチェック項目が書かれているので一つ一つ確認してチェックを入れていきます。

また2級では使用するソフトウェアについても正常に起動するかどうかの確認が必要になります。

2級で使用するソフトウェアは

  • Adobe Dreamweaver
  • Adobe Photoshop
  • Adobe Fireworks
  • Adobe Flash
  • メモ帳
  • TeraPad
  • サクラエディタ
  • Sublime Text

となっており。この中から自分の好きなソフトウェアを選択して作業します。

Adobeソフトのバージョンについては規定でCS4~6となっているようですが、自分の時はCS5でした。普段自分が使用しているバージョンと大きく異る人は事前に体験版などで操作感を確認しておくといいですね。

設備点検が終了したらその次に「実技試験課題選択表」という項目がありますが、これは試験問題の全5課題の内、最期の5問目だけ2種類の内1種類を自分で選んで作業することになるので、そのどちらを選択したかを記入します。
なので現時点では記入はせずに空欄のままにしておきましょう。

最期にデスクトップ上に作業で使用する素材が入った「data2」フォルダと作業したファイルを保存する「wd2」フォルダが存在しているかを確認します。
あるかどうか確認するだけでまだフォルダの中を展開しないようにしましょう。

確認後「wd2」フォルダの名前を変更して、末尾にアンダーバーと自分の受験番号を加えます。(例:wd2_00000000000)

実技試験開始

実技試験の時間は学科と違い2時間となっています。(3級も同じだったかは覚えてないです)

作業したファイルは前述の「wd2」フォルダの中に問題で指示されたとおりのフォルダを作成し配置します。

ただしこの中に配置するファイルは指示されたファイルのみなので例えば画像作成で保存した元ファイルなども置かないように注意してください。

実技も学科と同じく試験開始から30分後には退出自由となります。
そんなに早く作業が完了する人はそうそういないと思いますが…。

退出する際は提出フォルダの受験番号があっているか、作成した画像は指定された仕様通りか、作業したhtmlファイルはInternetExplorer・Firefox・GoogleChromeで正常に表示されるか、実技試験課題選択表に自分が選択した課題の番号を忘れずに書いているか確認しましょう。

問題用紙は持って帰る必要があるので、設備点検表および実技試験課題選択表のみ置いて帰りましょう。

これで試験の全ては終了となります。

合格発表

murata20150305-2

合格発表の日程については試験説明の中で試験官が教えてくれると思いますが、試験日から約1か月後となっています。

平成23年度の時点での合格率は以下の通りです。

1級…23% 2級…48% 3級…60%

合格者はウェブデザイン技能検定HPにて発表されるので、それで合否の判断をします。
その際に自分の受験番号が必要になるので、試験終了後も捨てずに保管しておきましょう。

ちなみに学科・実技いずれか片方だけの合格の場合は「一部合格者」として試験合格日から2年以内に実施される試験で合格した方の試験が免除されます。

当然ですが一部合格では本来の合格とは異なるのでその級のウェブデザイン技能士を名乗ることはできません。

合格証書については1級は厚生労働大臣より、2級3級についてはインターネットスキル認定普及協会理事長よりウェブデザイン技能士の合格証書が送られます。

1級だけ厚生労働大臣からなのに2級3級は違うから1級だけ国家検定なんじゃないの?とか思う人もいるかもしれないですが、2級も3級も国家検定です。あしからず。

最期に

ウェブデザイン技能検定についてずらずらと書きましたがいかがでしたでしょうか?

今回書いた検定の流れですが、あくまで自分が受検した2015年2月現在での流れなので、今後変わってくる可能性はあります。

必ず技能検定HPに書かれている内容や受検票と共に送られてくる文書はよく読み、当日の試験官の説明はしっかりと聞いてください。

ともかく、3級なら学科さえ頑張れば比較的簡単に合格できるので今後webの業界に就職・転職したいと思われている方は取っておいても損はしないのではないでしょうか?
3級だけではちょっとアピールとしては弱いかもしれませんが…何も無いよりマシです

平成26年度より試験要項のHTMLの部分がHTML5になったりCSSがCSS3になったりと時間が立つにつれ新しい要素が増えたり仕様が変わったりと覚えることが増えていく一方なような気がするので、1級まで取りたい方は今のうちにいっきに取っておいたほうが良かったりするんでしょうか…。

この記事を読んでウェブデザイン技能士について興味がわいた方はぜひ挑戦してみてはいかがでしょうか。

色々なSNSまとめ

$
0
0

どうも、GWも当然ソロで過ごす予定の一級ソロニストのムラタです。
皆さんはさぞ友人・恋人・家族と充実した休暇を楽しむことでしょう。
そしてその時の様子をFacebookやTwitter、Pinterestなどに投稿して沢山の仲間たちと「いいね」しあったりキャッキャウフフするかと思います。うらやまsh

今回はそんなSNSのはなしです。

目次

  1. そもそもSNSってなに
  2. 色んなSNSご紹介
  3. 最後に

そもそもSNSってなに

はい、まず「SNS」ってそもそも何なのってところから始めます。

「SNS」=「Social Networking Service」

インターネット上での交流を通じて社会的ネットワーク(ソーシャル・ネットワーク)を構築するサービスということらしいです。

ざっくり言っちゃうとプロフィール機能や個人間でのメッセージのやりとり、記事の投稿やコミュニティの作成などの機能がついていればだいたいSNSっていうことです。

メジャーなところをあげれば「Facebook」や「Twitter」、「LINE」一時期かなり勢いのあった「mixi」などがあります。

色んなSNSご紹介

SNSが一般的に普及しはじめて昨今では様々なジャンルに特化したSNSが出始めました。その中からほんの一部をご紹介したいと思います。

釣りペディア

01釣果共有SNS。
釣りに行った日時や場所、天候や気温・水温などの細かい釣果記録付きのブログ「釣行日記」があります。

魚の種類や釣り場から関連するブログ・動画を探したり、メーカーや値段、カテゴリーから釣具を検索してそこから直接購入までできるようです。

釣り好きな人にはオススメなSNSです。

onyourmark SNS

02ランニングや水泳、サッカー、トレッキングなど様々な種類の中から自分が行ったスポーツを記録して、フレンドと互いに「応援」しあうSNSといった感じでしょうか。

記録に関してはスポーツの種類の「マーク」を選び日時や簡単なコメントを残すだけの簡単なものになっていて、マークを取得し続けることで「メダル」と呼ばれるものを獲得でき、メダルのステータスは記録の頻度によって変化するという継続を促す仕組みになっているようです。

バイクブロス

03

大きく「Myコミュニティ」「Myショッピング」「Myフリーマーケット」「Myブックス」「Myバイクサーチ」の5つのコンテンツに分かれているようです。

Myコミュニティでは通常の日記以外にツーリングレポート、カスタムレポート、愛車レビューなどカテゴリー別に記事が書けるようになっていて、カテゴリーに合わせて入力するフォーマットが異なっています。

ただ会員登録時に入力する必須項目がやけに多いのでちょっと煩わしいかなと思いました。

とりっち

04鳥好きのための鳥専門SNS。

コミュニティにはしつけや食事、オフ会についてや普段使っているグッズについてなど頻繁に交流がなされているようです。

また迷子になったペットの鳥を探す時や保護した場合のコミュニティややむを得なく飼えなくなった鳥を里親に出すための里親募集コミュニティ、鳥を診てくれる病院を探せる鳥病院ガイドなど困ったときに役立つコミニティも充実しています。

trippiece

05みんなで旅をつくるがコンセプトの旅行SNS。

自分がしたい旅の企画を提案して、その企画に共感を持ってくれたユーザーが集り旅のプランを練り、内容が具体的に固まったらtrippieceと提携している旅行会社がその企画をツアー化して提供してくれるという変わったサービスです。

例えば猫島に撮影旅行に行きたいとなった時、周りの友達が写真の趣味がなかったり猫が好きでもなかったら誘いづらいと思います、かといってソロニストでない限り一人旅は寂しいことでしょう。

そんなときにtrippieceを使えば同じ趣味や価値観の人たちが一緒に行ってくれるというわけです。
まぁ自分はコミュ症なので初対面の人と行くなら一人で行きますが。

Cominy

06ファミ通.comが提供するゲームファンのためのSNS。

自分が遊んだゲームを「ゲーム棚」と呼ばれる自分だけのデータベースに登録。
登録したゲーム毎にレビューやブログを投稿できるようです。
※掲載した内容はコミニー内だけではなくファミ通.com全般に掲載されるようです。

「イベントカレンダー」ではゲームに関する今後のイベントを確認でき、自分が気になるイベントをマイイベントとして管理することもできます。
当然自分でイベントを登録することも可能でオンライン上のイベントや生配信・実況、リアルゲーム大会などのオフ会などのカテゴリーで登録することができます。

いきクル

0750代以上の女性たちのためのSNS。

シニア向けSNSということでシンプルな分かりやすい作りでなによりフォントサイズが大きい。

サークルと呼ばれるコミュニティには50代女性ならではのテーマが多く「おしゃべり」「手作り」「健康」などの公式サークルのほか、ユーザーが作成したサークルとして「着物のリフォーム」や「介護について」などのサークルがありました。

思ってたより頻繁に交流がされているようでSNSを利用する年齢層が上がっていることを実感させられます。

MedPeer

08医師専用SNS。

会員登録の際に勤務先の病院への電話確認か医師免許画像をMedPeer事務局に送付することで会員になれるという徹底ぶり。

内容してはエキスパートによる「症例相談」や医師による「医薬品の口コミ」、「診断力トレーニング」「医師限定の大規模調査」など医療に特化したコンテンツになっているようです。

YUCASEE(ゆかし)

09お次は裕福層専用SNS。純金融資産1億円の人だけが入会できるらしいです。

こちらも会員登録時に専門スタッフによる電話インタビューや各種書類照会などの審査があるようです。

自分は裕福層ではないしそんなセレブな友達もいませんので中でどんな交流がなされているのかは不明ですが裕福層の人間だけが知っているようなTVやネットでは見つからない情報が手に入るそうです。

サバゲーる

10サバイバルゲーム専用SNS。

サバゲーで使用する装備のレビューや「森林」や「市街地」「シューティングバー」など色々なジャンルからフィールドの検索でき、サバゲーチームの登録なんかもできるみたいなのでどこかのチームに入りたい方なんかはここで探してみるといいのではないしょうか?

またサバゲー初心者向けのコンテンツも充実していて、ルールや装備、フィールドについてイラスト付きで分かりやすくまとめられています。これからサバゲーを始めたいという方にもオススメできそうです。

RipCemetery

11故人を偲ぶSNS。

こちら海外のSNSで開発の資金を募っていたのですが、目標金額に届かず実現しなかったようですが(2015年4月現在)一応紹介しておきます。

どういう内容かというとインターネット上に仮想の墓地を作りそこに故人のアカウントを作成するというもの。故人の写真や動画をアップしたり、訪れたユーザーがウェブ上に花を添えたりメッセージを残したりできるそうです。
時間や場所を問わず擬似的にお墓参りができるといった感じでしょうか。

実現しなかったもののなかなか考えさせられるSNSでした。

ぶっこみ!

12仏像好きによる仏像コミュニティ。

仏像を観る、語る、彫るなどとにかく仏像が好きな人のためのSNSです。

仏像に関する掲示板や仏像人気ランキング、御開帳や展示会などの予定が分かる仏像カレンダーといったコンテンツがあるようです。

仏像の購入や自分だけのマイ仏像の製作依頼なんかもできるようなので、仏像好きな方はぜひ会員になってみては?

よかとも

13福岡に住んでいる、福岡が出身、福岡がとにかく好きな人のSNS。

前述した裕福層や医者のSNSと違って別に福岡に済んでいないと利用できないとかではないので、今後福岡に住む予定がある人や昔福岡に済んでいた人など誰でも登録は可能です。

よかともでは日記を書いたりフレンドの日記にコメントを書いたりすることで「ポイント」を獲得することができ、そのポイントで商品と交換することができるそうです。

GIRL’S TALK

14女性専用コミュニティ。

「恋愛」「ナイトライフ」「お仕事」「家庭」などの6つのテーマからトークを投稿したり誰かが投稿したトークに対してコメントしあうだけのシンプルな内容っぽいです。

テーマにもよりますがトークのお題も結構生々しくえげつないものが多く見られました。女性のホンネをぶちまけたい方やドロドロしたものを見るのがお好きな方はいいのでは。

ちなみに「男性専用 SNS」で検索すると更にえげつなかったので割愛します。

独女の溜まり場 アマリリス

17こちらも同じく女性向けのSNSですが独女(独身女性)限定となっています。

日頃溜まった様々な感情やストレスを発散させることで、共感と安心を得られる独女専用コミュニティということらしいです。

ぼやき(つぶやき)機能と、溜まり場(掲示板)機能がメインのコンテンツらしいですが、「アマ女の遊び場」という大喜利コンテンツも特徴的。

SENSEI NOTE

15全国の小中高の先生のためのSNS。

こちらは先生同士の信頼できるコミュニケーションのため完全実名制になっているようです。

先生が抱えている悩みや課題を他の先生からアドバイスをもらったり学級通信や授業の課題の教材などを他の先生と共有することもできるそうです。

Catmoji

16ネコ好きのための猫版Facebook?マレーシアで運営されているサイトらしいです。

中身はだいたい一般的なSNSと似たようなものっぽいですが、コミニティではなくcatmunity(キャットミュニティ)だったりアバターがcatvatar(キャバター)だったりと至るところが一々猫仕様となっています。

招待制となっているのと日本語未対応ということで全て英語になり参加するにはちょっとハードルが高いかも?

かみの王国 ハゲル~ナ

18薄毛と闘うSNS。

ド直球なネーミングありがとうございます。
薄毛に悩みがある人達が集い日々薄毛に関する情報を共有し戦い続けるSNSです。

登録時に頭髪の状態や現在行っているヘアケアについてを入力させられるとは思いませんでした。

ちなみにSNSの内容自体はいたって普通で髪友(フレンド)やコミュニティでのやりとりのみといったところでしょうか。

化け大倶楽部

19お化け大学校SNS。

妖怪好きが集まるコミュニティサイトで水木しげる・京極夏彦・荒俣宏の「妖怪学校」の公式SNSだそうです。

中身は残念ながら先ほどと同じいわゆるSNSテンプレート通りといった感じです。

最後に

いかがでしたでしょうか?
世の中には様々な種類のSNSがあることがわかったと思います。
気になったSNSがあれば参加してみてはどうでしょう、新しい交友関係が築けるかもしれませんよ。

ただし昨今ではネットリテラシー(インターネット上での常識・情報を正しく活用する能力)のないSNSへの投稿が問題となることが非常に多いです、せっかくのGWの思い出が残念なことにならないように気をつけましょう。

ではみなさん良い休暇をお過ごしください。

EC-CUBE内にWPの記事を出力させる

$
0
0

こんにちはムラタです。

今回はEC-CUBEで構築したサイト内にWordpress(以下WP)で投稿した記事を引っ張ってくる方法をご紹介したいと思います。

EC-CUBEとWPの連動にはEC-CUBEの無料プラグインである「WpPost」を使えばWPの投稿や固定ページを簡単に連動できるので便利ですが、記事詳細のURLが「http://xxxx/wppost/plg_WpPost_post.php?postid=xxxx」のようになってしまうのが嫌だったりカスタム投稿タイプは連動できないといった面もあったため今回はプラグインを使わずに処理してみました。

目次

  1. 構築環境
  2. EC-CUBEカスタマイズ
  3. 終わりに

構築環境

それではまず今回作業した構築環境からご紹介します。

  • EC-CUBE…Ver 2.13.3
  • DB…MySQL
  • WordPress…Ver 4.1.5
  • PHP…Ver 5.4.16

EC-CUBEをルートディレクトリに設置し、Wordpressは一つ下の階層「/post/」としました。

01

DB接続名の変更

WPとEC-CUBEを同じデータベースで使用するにあたり、データベース接続情報の変数がお互いかぶっているため、どちらかの名前を変更する必要があります。

WPの方を変更してしまうとWPをバージョンアップするたびにデータが上書きされそのたびに修正をかける必要がでてくると思うので、どちらかというとバージョンアップする機会が少ないEC-CUBEの方を編集しましょう。

名前の変更が必要な変数名は

  • DB_USER
  • DB_PASSWORD
  • DB_NAME

の3つで、これらの記述があるファイル全てを編集していきます。

/data/config/config.php」の8、9、11行目。
/data/class/SC_Initial.php」の86~89行目付近。
/data/class/SC_Query.php」の56~61行目付近。
/data/class/db/SC_DB_DBFactory.php」の68~73行目付近。

以上4つのファイルになります。変更する名前はなんでもいいのですが、自分は名前の頭に「EC_」をつけておきました。

EC-CUBEカスタマイズ

テンプレートに直接記述

02それではさっそく連携させていきましょう。
左カラムの「プライバシーポリシー」の下にWPのカスタム投稿タイプ「お客様の声」の新着4件を表示させてみます。

まず「/require.php」を開き、一番最後に以下を追加。

require_once 'post/wp-load.php';

これでEC-CUBE内でWPの関数を呼び出すことが可能になります。

次に「/data/Smarty/templates/default/site_main.tpl」の90行目付近「<div id=”leftcolumn” class=”side_column”>」の末尾に下記の記述を追加。

<p>お客様の声</p>
<div> 
  <!--{php}--> 
  $posts = get_posts('post_type=voice&posts_per_page=4');
  if($posts){
  echo '<ul>';
    foreach($posts as $post){
        setup_postdata($post);
        echo '<li>';
        echo '<div class="post_about">
        <time datetime="'.get_the_time('Y-m-d', $post->ID).'">'.get_the_time('Y.m.d', $post->ID).'</time>
        <p class="post_ttl"><a href="'.esc_url(get_permalink($post->ID)).'" class="opacity">'.esc_html(get_the_title($post->ID)).'</a></p>
        </div>';
        echo '</li>';
    }
    echo '</ul>';
  }else{
  	echo '<p>記事がありません</p>';
  } 
  <!--{/php}--> 
</div>

smartyでテンプレート内に直接PHPを記述する場合「{php}~{/php}」としますが、EC-CUBEで使用する場合は「<!–{php}–>~<!–{/php}–>」になります。

あとはWPの関数を使って記事を引っ張ってくるだけです。
上記の内容でcssを少し整えて出力した結果は以下の通り。

03

はい、簡単ですね。

ブロックにして好きな場所に出力させる

しかしテンプレートに記述する方法だと出力できる場所が限られてしまい、例えば「商品カテゴリー」の下や「新着情報」の下に出したいなどの柔軟な対応できません。

というわけで「ブロック」として登録して好きな場所に配置できるようにしましょう。

EC-CUBEの管理画面に入り、「デザイン管理」→「PC」→「ブロック設定」にアクセスします。

ブロック名は「お客様の声一覧」でファイル名は「wp_voice」とします。
内容に関しては先ほどテンプレートに直書きした内容をそのまま移すだけでOKです。

登録したら後は「レイアウト設定」で好きな場所に配置するだけです。
実際に「カレンダー」の上に配置するとこうなります。

04

はい、ドエレー”COOL”になりましたね。

EC-CUBEの商品とWPの記事を関連付けて出力させる

ここまではどのページでも一律で同じ記事の一覧がでるだけでしたが、今度は商品ページ毎にその商品に関連する記事を出力してみます。

まず何をもって商品と記事を関連づけるかという点ですが、今回はEC-CUBE側の「検索ワード」とWP側の「タグ」で関連づけます。

05

まず上記のように関連付け用の検索ワードを商品の検索ワードに設定して、同一の単語をWP側の記事のタグにも設定します。

06次に「/data/Smarty/templates/default/products/detail.tpl」を編集します。
出力する場所ですが「お客様の声」の直下に出すようにしてみましょう。
あと今気づいたんですがEC-CUBEの「お客様の声」と被ってますね…実際にはカスタム投稿を「レシピ」とか「レポート」とかお好きなものにしてもらえればと思います。

気を取り直してカスタマイズしていきます。
お客様の声の直下になるので348行目あたりに下記の記述をします。

<div>
<p style="font-size:14px; text-align: center; padding:15px; border:1px solid #FFA534; font-weight: bold; background:#FFDA6D;">より詳細なお客様の声はこちら</p>
  <ul>
    <!--{assign var=word value=$arrProduct.comment3}--> 
    <!--{php}--> 
    $word = esc_html($this->get_template_vars('word'));
    $word = explode(',', $word);
    $args = array(
        'post_status'=>'publish',
        'post_type'=>'voice',
        'posts_per_page'=>4,
        'tax_query'=>array(
            'relation'=>'OR',
            array(
                'taxonomy'=>'voice-tag',
                'field'=>'slug',
                'terms'=>$word
            )
        )
    );
    $posts = get_posts($args);
    if($posts){
        foreach($posts as $post){
            setup_postdata($post);
            echo '<li style="border:1px solid #CCCCCC; border-top:none; padding: 10px;">';
            echo '<div>
                      <time datetime="'.get_the_time('Y-m-d', $post->ID).'" style="margin-right:10px;">'.get_the_time('Y.m.d', $post->ID).'</time>
                      <a href="'.esc_url(get_permalink($post->ID)).'">'.esc_html(get_the_title($post->ID)).'</a>
                    </div>';
            echo '</li>';
        }
    }else{
    	echo '<li>関連レシピはありません</li>';
    } 
    <!--{/php}-->
  </ul>
</div>

PHP処理を書く前にsmarty内で検索ワード($arrProduct.comment3)を変数「word」に取得しておきます。

そしてその値をPHPに渡しますが、その場合「$this->get_template_vars(‘変数名’)」で渡すことが可能です。

後はその値をコンマ区切りで配列に直しwp関数のtax_queryにごにょごにょすればOKです。

cssを軽く調整して出力した結果がこちら。

07

はい、検索ワードと同じタグを設定した記事だけ出力されました。

しかしこれだと悲しい感じなので今回はアイキャッチも表示させてみましょう。該当ソースを下記に変更します。

<div>
<p>より詳細なお客様の声はこちら</p>
  <ul>
    <!--{assign var=word value=$arrProduct.comment3}--> 
    <!--{php}--> 
    $word = esc_html($this->get_template_vars('word'));
    $word = explode(',', $word);
    $args = array(
        'post_status'=>'publish',
        'post_type'=>'voice',
        'posts_per_page'=>4,
        'tax_query'=>array(
            'relation'=>'OR',
            array(
                'taxonomy'=>'voice-tag',
                'field'=>'slug',
                'terms'=>$word
            )
        )
    );
    $posts = get_posts($args);
    if($posts){
        foreach($posts as $post){
            setup_postdata($post);
            if(get_the_post_thumbnail($post->ID)){
            	$eyecatch = get_the_post_thumbnail($post->ID, array(50,50), array('alt'=>esc_html(get_the_title($post->ID))));
            }else{
            	$eyecatch = '<img src="NoImage画像のパス" alt="'.esc_html(get_the_title($post->ID)).'">';
            }
            echo '<li>';
            echo '<div>
            			'.$eyecatch.'
            			<time datetime="'.get_the_time('Y-m-d', $post->ID).'" style="margin-right:10px;">'.get_the_time('Y.m.d', $post->ID).'</time>
                        <a href="'.esc_url(get_permalink($post->ID)).'">'.esc_html(get_the_title($post->ID)).'</a>
                        
                    </div>';
            echo '</li>';
        }
    }else{
    	echo '<li>関連レシピはありません</li>';
    } 
    <!--{/php}-->
  </ul>
</div>

「get_the_post_thumbnail」でアイキャッチを取得してやるだけです。サイズやアイキャッチがなかった時のダミー画像はお好きな様に変更してください。
出力結果は以下のとおり。

08

もっとCOOLになりました。

tplに直接ではなくclassに記述する。

原因はよく分からなかったのですが、GMOペイメントの「2クリック決済プラグイン」を使用した際、上記のようにtplファイルに直接PHPの処理を記述しているとエラーとなりうまく動かないという現象が発生しました。

そうした場合tplファイルに直書きではなくクラスファイルの方に書いてあげると正常に動かすことができましたのでついでにご紹介しておきます。

編集するファイルは「/data/class_extends/page_extends/products/LC_Page_Products_Detail_EX.php」になります。

「function process(){ … }」の記述の後に以下の記述を追加します。

/**
     * Page のAction.
     *
     * @return void
     */
    public function action()
    {
          parent::action();
         
          //WPお客様の声記事を取得
          $word = esc_html($this->arrProduct['comment3']);
          $word = explode(',', $word);
          $args = array(
               'post_status'=>'publish',
               'post_type'=>'voice',
               'posts_per_page'=>4,
			   'tax_query'=>array(
					'relation'=>'OR',
					array(
						'taxonomy'=>'voice-tag',
						'field'=>'slug',
						'terms'=>$word
					)
				)
        );
          $posts = get_posts($args);
          $output = "";
          if($posts){
               foreach($posts as $post){
                    setup_postdata($post);
					if(get_the_post_thumbnail($post->ID)){
						$eyecatch = get_the_post_thumbnail($post->ID, array(50,50), array('alt'=>esc_html(get_the_title($post->ID))));
					}else{
						$eyecatch = '<img src="NoImage画像のパス" alt="'.esc_html(get_the_title($post->ID)).'">';
					}
                    $output .= '<li>';
                    $output .= '<div>';
                    $output .= $eyecatch;
                    $output .= '<time datetime="'.get_the_time('Y-m-d', $post->ID).'" style="margin-right:10px;">'.get_the_time('Y.m.d', $post->ID).'</time><a href="'.esc_url(get_permalink($post->ID)).'">'.esc_html(get_the_title($post->ID)).'</a>';
                    $output .= '</div>';
                    $output .= '</li>';
               }
          }else{
               $output .= '<li class="center">お客様の声はありません</li>';
          }
          $this->wpPostRecipe = $output;
     }

次に「/data/Smarty/templates/default/products/detail.tpl」の直接PHPで記述していた部分を

<div>
<p>より詳細なお客様の声はこちら</p>
  <ul>
    <!--{$wpPostRecipe}-->
  </ul>
</div>

に変更します。だいぶスッキリしました。

これでtplに直接記述した時と同じ出力結果になり、エラーも吐かれなくなりましたのでもし同じような現象で悩まれてる方はお試しください。

終わりに

EC-CUBEはカスタマイズ性は高いのですがあまり知識がない人間にはかなり敷居が高いですよね・・・今回自分もだいぶ頭を悩まされました。

そろそろEC-CUBE3がリリースされるようですが、もう少し敷居が低くなっているとありがたいですね。

というわけで機会があればEC-CUBE3の記事も書いてみようと思います。
それではまた次の記事でお会いしましょう。

EC-CUBE3のインストールとルートURLの変更

$
0
0

ムラタでございます。
今回は7月にリリースされたEC-CUBE3から

15

の3本をお届けします。

ちなみに構築環境は

  • XAMPP…Ver 1.8.2
  • EC-CUBE…Ver 3.03
  • DB…MySQL
  • PHP…Ver 5.4.16

になります。

目次

  1. インストール
  2. URLの変更
  3. おまけ
  4. 最後に

インストール

それではまずEC-CUBE3をダウンロードしましょう。

ダウンロードはこちらからメンバーにログインした後に可能です。
今回はこの記事を書いてる時点での最新版「Ver3.03」を使います。

解凍した中身は下記のファイル群になります。
00

任意の場所に解凍したら「html」にアクセスします。
すると自動的にインストール画面に移るので、6つのステップを指示に従いながら進めていきましょう。

①ようこそ

01

1つ目のステップではインストールにあたってシステム要件を満たしているかどうかのチェックが行われます。

もし[必須]となっている要件があれば解消しておきましょう。
今回はPHPライブラリのfileinfoが有効になっていなかったようなのでまずこれを有効にしていきます。

php.iniファイルの中から「;extension=php_fileinfo.dll」を探して、冒頭の「;」を削除することで有効化されます。

編集が終わったら必ずApacheを再起動して適用させましょう。

02

これで[必須]が消えました。
[推奨]はとりあえず今回は置いてそのまま次へ進みます。

②権限チェック

03

次は権限のチェックです。
特に問題は無いようなので次に進みます。

③サイトの設定

04

ここではお店の名前やメールアドレス、管理者のログイン情報、管理画面のディレクトリ名などを決定します。

④データベースの設定

05

次にデータベースの情報を入力していきます。
事前に用意していたDBの情報を入力しましょう。

06

正常に接続できればDBの初期化が始まるので次に進みます。

同じDB内にすでに旧バージョンのEC-CUBEをインストールしていて初期化したくない時はこの作業はスキップして次に進みましょう。

⑤インストール完了

07

以上でインストールは完了です。
③で設定したログイン情報でログインしてみましょう。

URLの変更

これで「html/」にアクセスするとデフォルトテンプレートでサイトが展開されているわけですが、やはり気になってしまうのはURLにどうしても「html」が入ってしまうことだと思います。

仮にサイトのURLが「http://testshop.com/html/」だとしたら「html」を外して「http://testshop.com/」にしたいですよね。

現在のバージョン(3.03)ではサイトURLをWPのように管理画面から変更するといったことはできないようですので、色々ファイルを編集したり移動させたりで変えるしかないようです。

ファイルの移動

08

まず手始めに「html」ディレクトリ内にある「index.php」と「.htaccess」、それと「robots.txt」ファイルを一つ上の階層に移動させます。

htaccessファイルはすでに上の階層にもありますが、上書きします。
※デバックモードを使用する場合は「index_dev.php」も一緒に移動します。

ファイルの修正

先ほど上の階層に移動させた「index.php」を編集します。

冒頭のコメントが終わったところに「require __DIR__.’/../autoload.php’;」という記述があると思うので、そこを「require __DIR__.’/autoload.php’;」に変更します。

「index_dev.php」も移動させた場合は、
require_once __DIR__.’/../vendor/autoload.php’;
$config_dev_file = __DIR__.’/../app/config/eccube/config_dev.yml’;
‘profiler.cache_dir’ => __DIR__.’/../app/cache/profiler’,
この3つを同じく「/../」→「/」としておきます。

次に「app/config/eccube/path.yml」というファイルを編集します。
「root_urlpath」という項目があるので、そこから最後の「html」を取ります。
例)「root_urlpath: /htdocs/html/」→「root_urlpath: /htdocs」

以上でURLから「html」を除いた状態でアクセスできるようになったと思います。

おまけ

これで今回のEC-CUBE3のインストールとURL変更についてはお終いですが、最後にもうひとつおまけで管理画面にちょっとしたカスタマイズをしてみましょう。

管理画面サイドメニューに項目を追加

09

管理画面左にあるメニュー群の末尾に任意の項目を追加してみましょう。

今回追加する項目は「マニュアル」とします。

管理画面を構成するのテンプレートファイルは「src/Eccube/Resource/template/admin」にあり、この中でサイドメニュー部分の記述があるのは「default_frame.twig」になります。

79行目付近に該当の記述があり、「ホーム」以外の子要素を持つメニューについては「nav.twig」をインクルードしてなにかゴニョゴニョして出力しているようです。自分にはさっぱりですが…。

今回は単純に「ホーム」と同じく直接この中に<li>~</li>の要素を記述することで対応させます。(この方法だと「ホーム」の前後もしくは末尾にしか入れることが出来ないですが)

<!-- ▼ #side ▼ -->
    <aside id="side">
        <ul class="nav nav-sidebar">
            <li>
                <a href="{{ url('admin_homepage') }}">
                    <svg class="cb cb-home"><use xlink:href="#cb-home" /></svg>ホーム<svg class="cb cb-angle-down"><use xlink:href="#cb-angle-down" /></svg>
                </a>
            </li>
            {{ include('nav.twig') }}
            <li>
                <a href="マニュアルのURL">
                    <svg class="cb cb-question"><use xlink:href="#cb-question" /></svg>マニュアル<svg class="cb cb-angle-down"><use xlink:href="#cb-angle-down" /></svg>
                </a>
            </li>
        </ul>
    </aside>
    <!-- ▲ #side ▲ -->

これで管理画面のサイドメニューの末尾に「マニュアル」が表示されているはずです。

10

表示されていない人は「app/cache/twig/production/」の中の「admin」をディレクトリごと削除してみてください。

アイコンの変更

11今回「マニュアル」ということでメニューのSVGアイコンを「?」としましたが、他にも色々なSVGアイコンが用意されています。

「html/template/adamin/assets/img/svg_list.html」にアクセスしてみると使用できるアイコンの一覧が見ることができるので、使いたいアイコンが見つかったら先ほどの挿入したソースコードの「<svg class=”cb cb-question”>」の「cb-question」を差し替えて下さい。

管理画面ホームに項目追加

12

最後に管理画面の「ホーム」にも「マニュアル」のリンクを追加してみましょう。

ホームのテンプレートファイルは先ほどと同じ「src/Eccube/Resource/template/admin」にある「index.twig」になります。

13

ソースコードを見れば分かりますが、1段ずつを「div class=”row”」で囲っており、その中のボックスをそれぞれ「div class=”col-md-xx”」で囲み幅を決めているようです。

このクラスの末尾の「xx」には1~12が設定されていて、各クラスと幅の設定は下記になります。

  • col-md-1…8.33333%
  • col-md-2…16.6667%
  • col-md-3…25%
  • col-md-4…33.3333%
  • col-md-5…41.6667%
  • col-md-6…50%
  • col-md-7…58.3333%
  • col-md-8…66.6667%
  • col-md-9…75%
  • col-md-10…83.3333%
  • col-md-11…91.6667%
  • col-md-12…100%

というわけなので、rowの中のcol-md-xxの幅合計が100%を超えないようにしましょう。

今回は2段目「ショップ状況」の右に追加してみました。

<div class="row">
            <div class="col-md-6">
                <div class="box" id="sale_info">
                    <div class="box-header">
                        <h3 class="box-title">売り上げ状況</h3>
                    </div><!-- /.box-header -->
                    <div class="box-body no-padding no-border">
                        <div class="sale_box clearfix">
                            <div class="monthly_sale">
                                <div class="item_number">
                                    {{ salesThisMonth is empty ? '¥ 0' : salesThisMonth.order_amount|price }} / {{ salesThisMonth is empty ? 0 : salesThisMonth.order_count|number_format }} <span>件</span>
                                    <div class="small">今月の売上高 / 売上件数</div>
                                </div>
                            </div>
                            <div class="yesterday_sale">
                                <div class="item_number">
                                    {{ salesYesterday is empty ? '¥ 0' : salesYesterday.order_amount|price }} / {{ salesYesterday is empty ? 0 : salesYesterday.order_count|number_format }} <span>件</span>
                                    <div class="small">昨日の売上高 / 売上件数</div>
                                </div>
                            </div>
                            <div class="today_sale">
                                <div class="item_number">
                                    {{ salesToday is empty ? '¥ 0' : salesToday.order_amount|price }} / {{ salesToday is empty ? 0 : salesToday.order_count|number_format }}  <span>件</span>
                                    <div class="small">今日の売上高 / 売上件数</div>
                                </div>
                            </div>
                        </div>
                    </div><!-- /.box-body -->
                </div><!-- /.box -->
            </div><!-- /.col -->
            <div class="col-md-4">
                <div class="box" id="shop_info">
                    <div class="box-header">
                        <h3 class="box-title">ショップ状況</h3>
                    </div><!-- /.box-header -->
                    <div class="box-body no-padding no-border">
                        <form id="form2" name="form2" action="{{ url('admin_product_page', { page_no : 1, status : 3}) }}" method="post">
                            {{ form_widget(searchProductForm._token) }}
                        </form>
                        <form id="form3" name="form3" action="{{ url('admin_customer') }}" method="post">
                            {{ form_widget(searchCustomerForm._token) }}
                            <input type="hidden" id="admin_search_customer_status_1" name="admin_search_customer[customer_status]" value="2">
                        </form>
                        <div class="link_list">
                            <div class="tableish">
                                <a href="#" class="item_box tr" onclick="document.form2.submit();">
                                    <div class="icon td"><svg class="cb cb-tag-slash"><use xlink:href="#cb-tag-slash" /></svg></div>
                                    <div class="item_number td">{{ countNonStockProducts|number_format }}<div class="small">在庫切れ商品</div></div>
                                    <div class="icon_link td">
                                        <svg class="cb cb-angle-right"> <use xlink:href="#cb-angle-right" /></svg>
                                    </div>
                                </a><!-- /.item_box -->
                                <a href="#" class="item_box tr" onclick="document.form3.submit();">
                                    <div class="icon td"><svg class="cb cb-users"><use xlink:href="#cb-users" /></svg></div>
                                    <div class="item_number text-left td">{{ countCustomers|number_format }}<div class="small">会員数</div></div>
                                    <div class="icon_link td">
                                        <svg class="cb cb-angle-right"> <use xlink:href="#cb-angle-right" /></svg>
                                    </div>
                                </a><!-- /.item_box -->
                            </div>
                        </div>
                    </div><!-- /.box-body -->
                </div><!-- /.box -->
            </div><!-- /.col -->
            <div class="col-md-2">
                <div class="box" id="shop_manual">
                    <div class="box-header">
                        <h3 class="box-title">マニュアル</h3>
                    </div><!-- /.box-header -->
                    <div class="box-body no-padding no-border">
                        <a href="#" style="padding:10px; border-top: 1px solid #d1d8d9; display:block;">操作にご不明な点がございましたら、こちらのマニュアルをご覧ください。</a>
                    </div><!-- /.box-body -->
                </div><!-- /.box -->
            </div><!-- /.col -->
        </div>

上記の内容で保存した後に「app/cache/twig/production」の「admin」ディレクトリを削除してホームを見てみましょう。

14

こんな感じになりました。

最後に

いかがだったでしょうか?

EC-CUBE3が公開になってまだ日も浅くまだまだ使いづらい段階ではありますが、EC-CUBE2ではなかった便利な機能が今後どんどん増えていくと思いますので大いに期待したいですね。

WordPressのプラグインを翻訳してみる

$
0
0

お鍋の季節になってきて週4くらい晩飯を鍋で済ませているムラタです。

さて今回はWPユーザーならみんな大好きなプラグインの翻訳作業をしてみようと思います

普段良く使っているメジャーなプラグインというのはだいたい既に日本語翻訳されているものばかりで自分で翻訳することなんてそうそうないと思いますが、翻訳されていないマイナーなプラグインを使うことがあり出力される文章全てが英語で困ったなぁという人はお試し下さい。

目次

  1. 使用するプラグインとソフト
  2. 翻訳を始める前に
  3. Poeditによる翻訳
  4. 終わりに

使用するプラグインとソフト

さて、今回翻訳するプラグインは「Namaste! LMS」というLMSを構築するプラグインです。

このプラグインについては機会があればまた別の記事で紹介したいと思います。

プラグインの翻訳といってもプラグイン本体を触る必要は全くありません。

別に本体を編集しても翻訳できないこともないですが、うっかり消してはいけない所を消して動かなくなってしまう危険性がありますし、なによりプラグインをアップデートした際に当然ですが全部元通りになってしまうので全くもって無駄です。

ではどうやって翻訳していくかというと「Poedit」という翻訳ソフトを使います。

翻訳を始める前に

このPoeditを使って翻訳していくわけですが、どんなプラグインでもすぐ翻訳を始められるというわけでありません。

プラグイン側にも翻訳するために下記の記述が必要です。

翻訳ファイルを読み込む関数

まずプラグイン内に「load_plugin_textdomain」というコンパイル済翻訳ファイル(MOファイル)を読み込む関数を記述しておく必要があります。

Namaste! LMSでは「models」ディレクトリ内の「namaste-model.php」内に記述があります。

04

①が任意のドメイン名、Namaste! LMSなので「namaste」となっています。
②は翻訳ファイルをロードできたかどうかの返り値。「false」で問題無いようです。
③は翻訳ファイルの格納ディレクトリの指定になります。上記だとNamaste! LMSプラグイン内の「languages」ディレクトリ。

翻訳テキストを取得する関数

次に翻訳するテキストに特定の関数が必要になります。

対象となる関数は
「_」
「__」(アンダーバー2つ)
「_e」
他にもいくつかあるようですが、とりあえずこの3つでしょうか。
Namaste! LMSの一文を例にだすと次の様な記述になります。

$message = __('You have already enrolled in this course','namaste');

第一引数で元となる英文を記述し、第二引数に前述のload_plugin_textdomainで指定したドメイン名が入ります。

これらの翻訳テキストを取得する関数を記述していないプラグインを翻訳するとなるとかなり気が遠くなりますね・・・

ちなみにNamaste! LMSはこれらの翻訳関数を記述してくれていますが「languages」ディレクトリの中は空っぽなので翻訳ファイル(PO・MOファイル)だけをこちらで準備する必要があります(Ver1.6.7時点)。

Poeditによる翻訳

それではいよいよ翻訳作業に入りましょう。

翻訳ファイルの生成

インストールしたPoeditを起動させてメニューから「ファイル」の「新規カタログ」を選択します。

翻訳の言語を聞かれるので「日本語(日本)」を選択。
次にメニューの「カタログ」から「設定」を選択し、下記のように設定・入力します。

01

次にタブの「ソース中のキーワード」を選択し、「追加キーワード」から「新規項目」より
「_」
「__」(アンダーバー2本)
「_e」
の3つを追加します。

02

ここまでできたら「OK」をクリックして名前を付けて保存します。
保存する場所と名前は前述した「load_plugin_textdomain」によって異なります。

場所は第三引数で指定したディレクトリに、名前は第一引数で指定したドメイン名+「-ja」となります。

なので今回は「languages」ディレクトリ内に「namaste-ja」というファイル名で保存となります。

翻訳ファイルの指定

保存ができたらもう一度「カタログ」から「設定」を開き、タブの「ソースの検索パス」を選択します。

「パス」の下の「+」ボタンをクリックして「フォルダーを追加」を選びます。
ディレクトリの選択画面に移るので「language」から一つ上のプラグインのルートディレクトリを選択します。

03

「ベースのパス」が「..\」となっているのを確認してOKをクリックします。
次にメニュー下にあるアイコンの中から「更新する」を選択します。

05

「カタログの変更を保存しますか?」と聞かれるので「保存」を選択します。
その後「カタログを更新中」となり翻訳対象テキストが一覧で表示されます。

翻訳

一覧が表示されたら早速翻訳してみましょう。

翻訳したい文章を選択すると画面下の「ソーステキスト」に選択した文章が表示されるので、その下の「翻訳」に翻訳した文章を記入します。

06

後はこれを繰り返すだけです。

一から十まで全部翻訳していると馬鹿みたいに時間を食うので暇じゃない人は必要な箇所だけ翻訳するのがいいでしょう。

翻訳していると翻訳元のテキストに「%s」とか「%d」というのが目につくかと思いますがそれは動的に吐き出される部分になので翻訳時も気にせず「%s」としておきましょう。というより削除したらエラーがでるかと思います。

ある程度翻訳したら実際にどう見えるのかを確認してみましょう。

作業しているファイルを保存すると自動的に同じ場所にMOファイル(コンパイル済翻訳ファイル)が生成されていることを確認してください。

あとは特に何もしなくてもプラグイン側が勝手に翻訳ファイルを読み込んで翻訳してくれるので該当部分を確認してみましょう。

08

自分の翻訳が正しいかどうかは置いておいて、翻訳されているのを確認できたと思います。

終わりに

いかがだったでしょうか?

全て英語だった画面が自分の手で少しづつ日本語化されていく過程は意外といい気持ちだったりしませんか?

最後に1点絶対に気をつけておかなければならないことがあります。

それはプラグインを更新するとせっかく翻訳した翻訳ファイルが綺麗さっぱり消えてなくなってしまうということです。

何日もかけて翻訳したファイルが消えたとなると発狂ものなので、翻訳ファイルに関してはバックアップをとっておくことをオススメします。

あともし全部翻訳完了して自分だけ使うのがもったいない・・・みんなにも使ってもらいたいっていう心の広い方はそのプラグインの製作者宛に翻訳ファイルを送ってみたら次のアップデートからあなたの翻訳がデフォルトで使われることになるかもしれないですね。

英語に自信がある人はぜひ。

WordPressでLMSを構築してみる

$
0
0

ナマステ、ムラタです。

今回は前回のプラグイン翻訳記事で使用した「Namaste! LMS」を使用してLMSを構築してみます。

そもそも「LMS」とはなんぞやと思いますが。
「LMS」とは「Learning Management System」の略称で、eラーニング(PCやスマホなどの機器を使った学習)の実施に必要な教材の配信や受講生の成績などを統合して管理するシステムのことです。

目次

  1. プラグイン導入
  2. 設定
  3. 実例
  4. 終わりに

プラグイン導入

今更書く必要もないでしょうが、Wordpressの管理画面より「プラグイン」の「新規追加」で「Namaste!LMS」と検索すると出てきますので、そこからインストールします。今回使用したVerは1.6.8.2です。

前回の記事でお伝えした通りこのプラグインは全て英語で書かれているため、ここで紹介する各機能の説明や名称などは自分の拙い英語力とGoogle先生によるエキサイティングな翻訳によるものです。

もしこのプラグインを使われる方で英語に自信がある方はご自分で翻訳されることを推奨します。

さて、Namaste! LMSではざっくり分けると下記のような機能が使用できます。

  • コースの作成
  • レッスンの作成
  • 課題の作成
  • 生徒の管理
  • 証明書(コースを完了したことの証明)の作成
  • 成績(コース毎に生徒に付与する任意のグレード)の設定

他にも別途プラグインを連携させて課題に柔軟性をもたせたり、コースを受講するための支払い設定やポイントシステムなど様々な機能があります。

ちなみにこのプラグイン有料版もあり、より優れた機能を活用できるようです。
たとえば・・・

  • 購入後1年間の無料サポート(ただしメールでのやりとりのみ?)
  • 翻訳対応(日本語が含まれるかは不明)
  • クラスを作成し、それに基づいてコースへのアクセスを制限する
  • 無制限のドメインライセンス(?)

他にもたくさん機能が追加されているようですが、ちょっと何言ってるか分からない感じでした。言葉の意味は分からないがとにかく凄いということです。

それではひとつひとつの機能を少し掘り下げて紹介していきましょう。

設定

コースの作成

インストールと有効化が済んだらまず「コース」を作成します。なにはともあれコースがなければ始まりません。

管理画面の「Courses」よりコースの作成や編集を行います。

一覧画面ではコース毎のアクセス数やカテゴリーが確認できますが、カテゴリーは何故かカスタムタクソノミーではなくデフォルトのブログで使用しているカテゴリーから選ぶようになっています。

01

投稿画面は通常のブログ記事と同じようにタイトルと本文が入力可能です。

「設定」では受講に対して管理者の承認の有無やアクセスに対する前提条件、コースを完了させるために必ず受講する必要があるレッスンの指定などがあります。

今回「HTML入門コース」として受講には管理者の承認が必要な設定にしました。
アクセスへの前提条件はまだ他にコースがないので今回は無しです。
コースの完了条件の指定には事前にレッスンを投稿しておく必要があります。

レッスンの作成

コースを作成したら次にレッスンを作成します。
レッスンの設定には

  • どのコースに属するのか
  • レッスンのアクセス条件
  • レッスンの完了条件

などがあります。

02

「どのコースに属するか」は必ず設定しないとならないので1つは必ずコースを作成しておく必要があるわけです。

「レッスンのアクセス条件」は同じコースに属する他のレッスンの中から、事前に完了させておく必要があるものを選択できます。

ただしこの設定、自分が触ってみた限りでは条件を満たしていなくても普通にページにアクセスできちゃいました・・・

しかしレッスンに課題を設定している場合はその課題ページにはちゃんとアクセス出来ないようだったので正しくは「レッスンの課題へのアクセス条件」な気もします。

「レッスンの完了条件」は管理者による承認が必要かどうかを選択できます。
またその場合「課題」を事前に作成しておくことで課題のクリアも完了条件に含ませることができます。

課題については「watu」というプラグインと連携することでwatuで作成したより高機能な課題をレッスンに設定することができるようです。

ちなみに未指定の場合は生徒がレッスンにアクセスするだけで「完了」となります。
ということで、自分が把握している限りレッスン完了とさせる設定は以下の4パターンです。

  1. 受講生がレッスンにアクセスした段階で自動的に完了とする。
  2. 受講生がレッスンにアクセスした後、管理者が完了の承認をする。
  3. 受講生がレッスンにアクセスした後、自分で「完了」設定を行う。
  4. 受講生にレッスンの課題を提出させ、管理人が合否の判断をして承認をする。

課題の作成

では次に課題を作成してみましょう。

課題を作成するにはコースとそれに属するレッスンを選択する必要があります。

04

課題はタイトルと課題内容を入力するだけの簡単なものです。

また課題によって解答者にファイルをアップロードさせることも可能です。
登録できたらレッスン登録画面で完了条件として選択します。

課題は1つのレッスンに複数個設定することも可能です。

完了証明書の作成

お次は特定のコースを完了した際に発行する証明書を作成します。

05

証明書名と本文を入力するわけですが、本文には以下の変数が使用できます。

  • {{name}}…完了させたユーザーの名前
  • {{courses}}…完了させたコース名
  • {{courses-extended}}…完了させたコース名とその概要。概要は「抜粋」が使用される。
  • {{date}}…証明書を獲得した日時
  • {{id}}…獲得した証明書のユニークなID

また「PDF Bridge」プラグインをインストールすることで証明書をpdfとして出力させることが可能です。

ただし残念ながら日本語の場合は文字化けしてしまい使い物になりません。

実例

最後に受講から完了までの流れを実際に出力される画面を見ながら紹介します。

1.コースへのアクセス

06

・コースの受講

コースのページにアクセスしたログインユーザーはまずコースの概要を確認した後、「受講する」ボタンをクリックして受講を申請します。

設定によってはページにアクセスした時点で受講とさせることが可能です。

・管理人による承認

管理者ユーザーが管理画面より承認待ちのユーザーを確認して、問題なければ「承認」とします。
08

2.レッスンへのアクセス

これでコースを受講したユーザーがレッスンへアクセスできるようになりました。
レッスンごとに完了させる設定がしてあるのでユーザーがそれに応じて全てのレッスンを終わらせていきます。

今回は画像を提出させる課題のパターンで実践してみます。

・内容と終了過程の確認

レッスンにアクセスしたユーザーは内容を確認し、レッスンを終了させるために必要な工程を確認します。
10

・課題の提出

上記「レッスン修了までの工程」にある課題リンクにアクセスすると管理画面内の課題提出画面に移ります。(設定によっては恐らく管理画面に遷移せずにページ上に課題提出フォームを出力させることができると思います。)
11

ユーザーが課題を送信した後、管理者側が提出された課題の確認を行います。
12

該当のレッスンの「解答を見る」より解答一覧を表示して、提出内容に問題がなければステータスを「承認」にします。

また承認とする前に「備考/フィードバック」より課題に対してコメントを送ることも可能です。
13
送られた備考はユーザーの管理画面の課題詳細画面より下記のような感じで表示されます。
14

・レッスンの完了

課題はこれで完了になりますが、課題の完了=レッスンの完了と自動的にならないようで、また個別にレッスンの完了を管理者が指定する必要があります。(この辺は自分の設定が悪いように思えます)

完了させるには管理画面の「生徒」ページよりコースを指定して、一覧の中から該当の生徒の名前をクリックすることでその生徒の現在のレッスンのステータスが表示されるので、そこから完了させたいレッスンのステータスを「完了」に変更します。
15

これでようやくレッスンをひとつ完了とさせることができました。
後は残りのレッスンも同じ流れで受講・完了させていきます。

証明書の授与

残りのレッスンも完了させ該当コースの完了条件を満たした際に設定によっては「証明書」を授与することができます。

こちらは証明書を作成した時点で授与条件を設定しているので条件を満たした時点で自動的に付与されます。

ユーザーが取得した証明書を確認するには管理画面の「My証明書」より確認できます。
16

出力内容はhtmlか別途プラグイン導入によるpdfになりますが、前述のとおりpdfの場合は日本語が文字化けてしまいます。
htmlの場合はこんな感じです。

17

はい、装飾もクソもないまっさらな文字だけの寂しいページが出力されます・・・
このへん有料版でどうにかできたりするんでしょうかね。

終わりに

いかがでしたでしょうか?

正直なんのこっちゃと思われているでしょうが、書いてる自分自身も現状このプラグインについて把握しきれていないです。

実際このプラグインを使って本格的にLMSを始められるにはかなり難易度が高いですが、ちょっとしたものならこういったプラグインで対応できると思いますので、「こんなプラグインがあるんだ」程度で記憶の片隅においていただけると幸いです。

それでは皆様よい年末年始をお過ごしください。


全天球撮影を始めよう

$
0
0

皆様こんにちは、寝る間も惜しんで「ドラゴンクエストビルダーズ」をプレイして常時眠いムラタです。

今回は一般にも普及しはじめた全天球撮影について紹介しようと思います。

「全天球」って?

「全天球撮影」といわれても全くピンと来ない人がほとんどだと思いますが、要するにアレです、Googleストリートビューのように上下左右360°全てが見渡せるパノラマ写真撮影のことです。
↓こういうのです(PCは画面をクリックしたままグリグリマウスを動かしてみてください。スマホの場合は指でスライドしてみてください)

全天球撮影によって通常の写真のように風景の1面だけを切り取るものではなく、その場の『空間』を記録できるようになるわけです。

他にもYoutubeでは全天球で撮影した動画を先ほどと同じように360°グリグリ動かすことが可能です。(PCの場合は対応している一部ブラウザのみ)
特にスマホで閲覧した場合はスマホの向きと動画の向きが同期したような動きになり、例えばスマホを下に向けると動画内の映像も下を向きます。

※スマホの場合はYoutubeのアプリ内で観ないとダメかもです。

今、全天球カメラが熱い

360°カメラ

全天球が一般的に使われだしたのが一体いつ頃なのかは分かりませんが、ここ最近身近なところでよく目にするようになったのは確かです。

特にリコーから2013年に発売された「RICHO THETA」が全天球撮影の火付け役になったと言ってもいいのではないでしょうか。

最近では今月ラスベガスで開催された家電見本市「International CES 2016」で様々なメーカーからも全天球カメラの発表がありました。

例えばニコンの「key Mission 360」やフランスのGiroptic社の「360Cam」、香港系メーカーのKenxenの「SDV180」などなどそれぞれ特色のある形状や機能の全天球カメラとなっています。

詳しくはデジカメWatchさんのレポートを御覧ください。

このように全天球カメラに参入しているメーカーはここ最近で数を増やしているわけですが、当然それらを使って撮影した360°写真や動画のコンテンツの数も徐々に増えてきています。

360°コンテンツ

例えば先ほど一例としてYoutubeの360°動画を掲載しましたが、Youtubeが360°動画に対応したことによってプロ・アマ問わず沢山の360°パノラマ動画が増えており、Youtubeで「全天球」「360°」などで検索するとその多さが実感できると思います。

06
動画一覧画面に「360°」というアイコンが付いているものがそうです。

他にも360°パノラマを体験するコンテンツとしてスマホアプリがありますが、スマホでは先ほど少し触れたようにPCの時のようにマウスでグリグリする必要がなくスマホの向きと連動して動画内のカメラの向きを変えることができます。

それを活用したコンテンツとして「VR=バーチャルリアリティ」と呼ばれるコンテンツが増えています。

いわゆる仮想現実というやつで、実際にその場にいなくても映像の中の世界に自分がいるかのような体験ができます。

95年に任天堂が出したバーチャルボーイとかまさにそれでした。
プレイしたことないですが・・・

観せ方としてスマホでは下の画像のように画面の左右で映像を出力してそれを左右の目で見る際の両眼視差を利用して映像に奥行きなどをもたせているそうです。

08

当然このまま裸眼で見たところで全然奥行きなんかで出ませんし、見えたとしてもその状態をキープしたまま映像を見続けるなんて楽しむってレベルじゃないですよね。
そこでVR動画を楽しむためには別途「VRビューア」と呼ばれる専用のガジェットが必要になります。

「どうせお高いんでしょう?」と思われるかもしれませんが、実はそんなことはありません。
スマホ専用のVRビューアでダンボールを組み立てるだけの大変簡素で安価なものがあります。

他にもGoogleでも「CARDBOARD」と呼ばれるダンボール製のVRビューアを提供しており、Amazon等で購入することができます。
また仕様書(設計図?)も公開されており、ダンボールやレンズ、輪ゴムなどを用意して自分で作ることも可能ですが、まぁ高いものでも無いですし買ったほうが早いです。

ハコスコやCARDBOARDもスマホをレンズの前に横向きで固定してVRビューアを手で持って覗きこむような形で鑑賞します。

07

VR対応アプリ

これらのVRビューアを使って楽しめるiosアプリのほんの一例を紹介します。
ちなみに全てにandroid版があるかどうか分からないです、なかったらすみません。

  • Youtube
    鉄板 of 鉄板。VR対応動画を再生するとシークバー横にゴーグルのようなアイコンがでているのでそこから切り替えが可能です。
  • Googleストリートビュー
    昨年10月のアップデートより360°写真の投稿やVR対応となりました。またアプリ内の機能でスマホのみで全天球撮影ができるようになっています。
  • ハコスコアプリ
    先ほどVRビューアで紹介した「ハコスコ」が提供しているアプリです。パノラマ写真や動画を楽しめます。
  • VR Jump Tour
    その場でジャンプすることで映像内でものすごいジャンプをしているような体験ができます。
  • パノミル
    最近立体音響コンテンツも追加されたようでVR体験がより臨場感あふれるものになってます。ヤバイです。
  • Smash Hit
    目の前に現れるガラスをぶっ壊しながら進むだけのゲーム。元々はVR対応していなかったが最近対応した模様。プレイはしていないのですがVRビューアしながらだと操作しづらそうなイメージです。
  • Chameleon360 player
    観光地やスポーツやイベントなどをVR体験が可能です。
    「SPECIAL」コンテンツ内のホラー映像「友引」はぜひ夜中に一人で御覧ください。オススメです。

実際にいくつかCARDBOARDで観てみたのですが、やはり安かろう悪かろうなのかどうもぼやけて見えるというか期待していたほど鮮明な画像での没入感は得られませんでした。
お高いVRビューアならもっと綺麗に見えたりするんでしょうか。

没入感の良し悪しは置いておいて、ホラー系とVRの組み合わせはヤバイですね。
これに立体音響まで組み合わせると一体どうなってしまうのか…
もっとホラーのコンテンツが増えることを期待してます。

ちなみに今回紹介したアプリ以外にも山程対応アプリがあるので「VR アプリ」とかでググッてみてください。

全天球撮影をしてみる

色々な360°コンテンツを体験してみて「観てばっかりじゃなく自分も投稿してみたい!」という気持ちになってる人もいるのではないでしょうか?
今度は実際にYoutubeとGoogleストリートビューに360°コンテンツを投稿してみましょう。

撮影に使用する機材

今回撮影にあたって用意したものはこちら。

03
「RICHO THETA S」
スタイリッシュなボディと手軽に高画質な撮影ができるスグレモノ。

お値段は4万円前後と旧モデルのTHETAに比べると1万円ほどお高いですが、そのお値段に十分見合った性能を兼ね備えてるのではないでしょうか。

旧モデルとの違いに関しては画素数が600万画素から1400万画素に、内蔵メモリは4GBから8GBに、動画撮影に関してはフレームレートが15fpsから30fpsになり撮影時間も5分から25分に大幅進化しています。

09
「iphone / Android」
THETA Sにはwifiモジュールが内蔵されていてスマホと接続することで、スマホ側のTHETA専用アプリを通してライブビューで実際の写りを確認しながら撮影したり、撮った写真に対してフィルターや特定の部位にぼかしなどの処理を加えることも可能です。
なくても撮影はできますがほぼ必須と考えていいでしょう。

08
「一脚・三脚」
撮影する際、普通に手で持って撮影した場合、自分の顔がバッチリ写っちゃってなんだか恥ずかしいし、頭の上に掲げて撮っても360°パノラマで観た際に真下を向けると手や腕がガッツリ写ってるしなんだかスマートじゃなくて嫌だなぁていう方はTHETA Sのケツに三脚ネジ穴がついていますので一脚や三脚を活用しましょう。

THETA Sはスマホと重さが大差ないので一脚は自撮り棒とかで代用してもOKです。
一脚を活用することで真下を向けたときに手や腕が写らずスッキリしますし、より高い視点で撮影することもできます。

三脚を使った場合、完全にその場に固定されるので撮影者はどこか映らないところに隠れてスマホから遠隔でシャッターを切ることで全く写らなくできます。

ただし三脚の足を大きく開いて置いている場合はその足部分が写り込んでしまいますし、クイックシューも大きさによっては写り込んでしまいます。
例えば下のリンク先のパノラマ写真は会社の前を写したものですが、下をむくとクイックシューが写り込んでいるのが分かると思います。

ただ、これでも手や腕がガッツリ写り込んでしまうよりはだいぶマシだと思います。

Youtubeへの投稿

ではいよいよYoutubeへの投稿をしていきましょう。
Androidの一部機種に限りスマホから直接Youtubeへの投稿が可能なようですが、今回はPCからの投稿方法のみをご紹介します。

1.動画の撮影

THETA SはFull HDで25分間の連続撮影が可能ですが、アップロード用にファイルを変換する作業の際に数分の動画でも意外と時間がかかりますので、長くても3分前後を目安に撮影するのがいいのではないでしょうか。

まず用意した三脚または一脚にTHETA Sを取り付けます。
高さや位置を適宜調整して位置が決まったらスマホのTHETAアプリを起動して撮影を開始します。

手持ちや一脚の場合はなるべくブレないように意識して撮りましょう。

2.動画の変換

撮影が終わったらTHETA SをPCとMicro USBで接続して撮影した動画を一旦PC内に保存します。

撮影した動画ファイルはそのままだとYoutubeにアップしても360°動画にはならないので360°動画として見れるように変換する必要があります。

そのためにまずPCで360°写真や動画を閲覧するための専用ソフト「RICHO THETA for Windows / Mac」をインストールします。

インストールが終わったらソフトを起動させて先ほどのPCに保存した動画ファイルをドラッグ&ドロップで展開します。
すると変換ダイアログボックスが開き、変換ファイルの保存場所を設定後変換が開始されます。

09

変換が終了したら自動で再生が始まるので撮影したものに問題はないか前後左右動かしながら確認しましょう。

問題なければもうソフトは閉じちゃっても大丈夫です。
先ほど指定した場所に変換後の動画ファイル(ファイル名の末尾に「_er」がついたmp4)があるので、そちらをYoutubeにアップします。

3.Youtubeへアップロード

それではPCのブラウザからYoutubeにアクセスしましょう。
ログインしていなければログインを済ませて画面右上の「アップロード」ボタンを押します。

01

アップロード画面に移りますので画面中央の「アップロードするファイルを選択」に先ほどの変換した動画ファイルをドラッグ&ドロップしてアップロードを開始します。

アップロード中に色々動画についての設定ができますがここでは割愛します。
360°動画にするために特別に何か設定しないといけないというわけではありません。
変換した動画の中に特別なメタデータが埋め込まれていて、それで360°動画かどうかを判断しているようです。

アップロードが終わったら実際に再生して確かめてみましょう。
PCの場合使用しているブラウザによっては360°動画に対応していない場合があるので、Chromeを使うと確実です。

360°動画の場合、画面左上に擬似パッドのようなものが表示されているので、それが表示されていれば無事360°動画としてアップ完了となります。

02

観てみると分かりますがフルHD(1920×1080)とはいったものの全天球用に引き伸ばしてるせいか正直だいぶ画質がよろしくないです。
写真だとそんなことないんですが、これは今後の後継機種に期待するしかないですね…

Googleストリートビューへの投稿

次はGoogleストリートビューへの投稿をしてみましょう。

■スマホでの投稿

スマホの場合、まずGoogleストリートビューのアプリをインストールします。

インストールが終わったらTHETA Sの電源をONにしてスマホと接続状態にさせてからアプリを起動します。
正常に接続できている場合アプリ内画面下に「RICHO THETA Sに接続されています」と表示されます。
この状態で右のカメラアイコンもしくは「カメラを起動」をタップすることで、THETA Sが起動してそのまま撮影に移ります。

撮影が済むと画面下でペグマンが写真を貼り付けるアニメーションをした後、そこに先ほど撮影した写真が表示されます。
スマホの位置情報をONにしていればピンの位置を自動で合わせてくれてその場所の名前も自動でいれてくれようです。

表示された写真をタップすると全画面で撮影した写真を実際に360°動かしながら閲覧することができ、「Googleマップに公開します」をタップすることで指定した場所にパノラマ写真として投稿するか通常の平面の写真で投稿するか選択できます。
当然今回はパノラマ写真として投稿します。

04

ただし、公開する際はWi-Fi環境が必須となるので屋外で撮影した場合はポケットWi-Fiを持ち歩くか自宅等のWi-Fiがある環境に戻ってからの公開作業になります。

一旦公開を保留した場合、アプリ内メニューの「非公開」に撮影した写真が入っているので、公開したい写真を選択してアップロードアイコンをタップして「公開」にします。

無事公開が済んだ場合、写真が「非公開」から「プロフィール」に移動しているので確認します。

これでアプリ内での公開作業は終わりなのですが、どうせならGoogleマップでその場所を検索したときにも公開した360°写真を表示されたいですよね?

その場合、先ほどの「プロフィール」から公開済の写真に「場所を追加」という項目があるので、そこをタップして撮影した場所の施設名があればそれを選択します。

場所が追加されたら早速Googleマップで先ほど追加した場所の名前で検索してみましょう。
「360°パノラマ写真」という項目が追加されているはずです。
※PCだとすぐ反映されましたがスマホのアプリ版だと反映されていませんでした。まだアプリが対応していない?

05

なお、ストリートビューのヘルプによると撮影者が映り込むとGoogleマップに採用されない可能性があるそうなので、撮影する際は三脚を使用して撮影者が極力映らないようにして撮影しましょう。

と言うものの今回撮影者の自分が結構しっかり写り込んでいますが今のところ特に削除されるようなことにはなっていません。
画面の何割映り込むとダメみたいなのがあるんでしょうか。

■PCでの投稿

PCからの場合、まずTHETA Sで撮った360°写真をPCに取り込む必要があるので、Youtubeの時と同じくTHETA SとPCを繋いでデータを落として「RICHO THETA for Windows / Mac」で投稿用に写真を変換します。

アップしたい写真全て変換が完了したらブラウザからGoogleマップへアクセスしてアップしたい場所を検索してその場所の情報を表示させます。

写真一覧部分の真下に「写真を追加」という項目があると思うのでそこをクリックしてアップロード画面に移ります。

07

そこに先ほど変換した360°写真をドラッグ&ドロップでアップロードすることで投稿は完了です。
しばらくしたら先ほどの写真の部分に追加されているのが確認できると思います。

最後に

ここまで全天球について紹介してきましたがいかがでしたでしょうか?
まさに「世界的ですもんね。乗るしかない、このビッグウェーブに」と思わせてくれるコンテンツではないでしょうか。

今年はSONYからPlayStation VRが発売される予定ですし、最近任天堂も今後VR技術への研究を進めていく方針を明らかにしました。
間違いなくVRの波は押し寄せてきているのでもし興味が湧いた方はこの機会にぜひ全天球撮影にチャレンジしてみてはいかがでしょうか?

Photoshopの画像アセットの書き出し先を擬似的に変更する

$
0
0

こんにちは、最近20年振りにポケ●ンマスターを目指してマサラタウンにさよならバイバイしたポケモ●トレーナー(31)のムラタです。

最初に貰う一匹のみを鍛え抜き、酷使し続け、ただひたすらに効率のみを求めるプレイスタイルに心の汚れを感じます。

そんな少年の心を忘れた汚い●ケモンマスターからの今回の投稿はPhotoshopの「画像のアセット」で切り出される画像の出力先を「シンボリックリンク」を使って擬似的に変更させるというものです。

この記事読んでる人はだいたい「画像のアセット」がどんな機能なのか知っていると思いますが、一応ざっくり説明しておきます。

画像アセットとは

従来のスライスツールでの範囲を指定して書き出すのとは違い、レイヤー単位での書き出しとなり、レイヤー名に「parts.png」や「banner.jpg」といった具合に「画像名+拡張子」を指定しておくことで、その名前と拡張子で勝手に書きだしてくれます。

一度「画像アセット」を実行しておくと、今後は対象のレイヤーに変更があれば即座に前回書きだした画像にも変更が反映されるので、都度「画像アセット」を実行する必要はありません。

img01

ちなみにFireWorksでも書き出し時に「レイヤーからファイル」を選ぶことで同じようにレイヤー名で各ファイルをまとめて書き出すことができましたが、パーツごとの拡張子や画質などが設定できませんでしたし、書き出したくないパーツに関してはいちいち非表示にしておく必要がありました。

画像アセットの書き出し先

さて、ここからが本題ですが、画像アセットを使用した場合、書き出し先は現在作業しているファイルと同じフォルダ内に「作業ファイル名-assets」というフォルダを生成してその中に格納されます。

img02

この書き出し先は今のところ設定などはなく、変更することはできません。
なのでほとんどの人が書き出し先の「作業ファイル名-assets」から任意のフォルダへ書きだしたファイルを移すという作業が発生します。

1回だけならまだしも画像に修正があるたびに生成したファイルを移動させるのは地味に面倒くさいですよね。

シンボリックリンクの生成

では「シンボリックリンク」を使って書き出し先を擬似的に変更していきましょう。

シンボリックリンクって?

そもそもシンボリックリンクって何?って話ですが、正直自分も詳しくないので各自ググってください。たぶんよくわからないと思います。

「ショートカット」と同じように特定のファイルやディレクトリへのパスを記述したものですが、ショートカットはそのパスへ移動するだけなのに対してシンボリックリンクはそのパスのファイルやディレクトリそのものとして扱える。ということだと自分は認識してます。違ってたらごめんなさい。

img03

ちなみにシンボリックリンクはwindows Vista以降のOSなら作成可能なようなので、大体の人は問題ないと思います。

作成の流れ

では早速シンボリックリンクを作成していきましょう。

下記のディレクトリ構成を例として「/works/top-assets」にアセットされた画像が「/assets/img/top」に入るようにします。

photoshopが生成した「top-assets」フォルダが既にある場合は一旦削除しておいてください。

img04

シンボリックリンクを作成するには「コマンドプロンプト」を管理者権限で開く必要があります。

コマンドプロンプトが開いたら
「mklink /d “アセットで書き出されるフォルダのパス” “シンボリックリンクさせたいフォルダのパス”」
とします。

なので今回のディレクトリ構成ならこうなります。

C:\Windows\system32>mklink /d "D:\works\htdocs\test\works\test-assets" "D:\works\htdocs\test\assets\img\top"

パスを手打ちで入力するのはパスが長いと面倒だし間違えると困るので、コピペするのがいいでしょう。

ただコマンドプロンプトでは「Ctrl+V」で貼り付けることができません。右クリックから「貼り付け」を実行できます。

上記コマンドを叩くと
D:\works\htdocs\test\works\test-assets <<==>> D:\works\htdocs\test\assets\img\top のシンボリックリンクが作成されました
とメッセージが出るはずです。これでシンボリックリンクの作成は完了です。

command

シンボリックリンクできているか確認

では「D:\works\htdocs\test\works\」に「test-assets」フォルダが生成されているか、test.psdからアセットした画像が「D:\works\htdocs\test\assets\img\top」に入るか確認してみましょう。

ということで早速top.psdを開き画像をアセットしてみます。
そして「D:\works\htdocs\test\assets\img\top」の方を見ると・・・

img05

ちゃんと入っています!これで毎回書き出す度にファイルを移す必要がなくなりましたね。

終わりに

この記事を書いていて思ったのですが、アセットした画像を全て同じディレクトリに入れるなら良いのですが、パーツによっては「top」だったり共通画像フォルダの「common」だったりするわけで、そういった場合だと結局今回のような方法は逆に使えないですよね・・・うーん。

結局のところ真面目に毎回ファイルを移動させるか、そもそも画像のアセットを使わずにパーツごとにクイック書き出しやスライスツールなどで任意のディレクトリに書き出すのが正解なのでしょうか。

とにかくシンボリックリンクについては今回以外にも色々活用できそうなので、調べてみるといいかもですね。

EC-CUBEにTinyMCEを導入する方法

$
0
0

どうも吉塚のポケモンおじさんことムラタです。

今回はEC-CUBE(Ver2.13.5)にWordpressを触ったことがある人には馴染み深いエディター「TinyMCE」を導入してみます。

目次

  1. TinyMCEをダウンロードする
  2. TinyMCEをEC-CUBEに設置する
  3. TinyMCEの設定
  4. 最後に

TinyMCEをダウンロードする

それでは早速TinyMCEを下記URLからダウンロードしましょう。
今回はVer4.4.0となります。

CDNも用意されているのでそちらを利用してもいいですね。

<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>

TinyMCEをEC-CUBEに設置する

本体ファイルを設置する

ダウンロードが完了したらファイルを展開してEC-CUBE内の「html/js/」に移します。

次にEC-CUBEの「data/Smarty/templates/admin/main_frame.tpl」を開き、</head>直前で

<script type="text/javascript" src="<!--{$smarty.const.ROOT_URLPATH}-->js/tinymce/js/tinymce/tinymce.min.js"></script>

とします。
もしくは前述したと通り、CDNも利用できるので、

<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>

としてもOKです。

TinyMCEを適用する

本体ファイルが設置できたら次に商品登録(編集)画面のtextareaに対してTinyMCEを適用させます。

data/smarty/templates/admin/products/product.tpl」を開き、既存の<script>内の末尾に書きを追記します。

tinymce.init({selector:'textarea'});

これだけです。
では実際にEC-CUBE管理画面にアクセスして商品登録(編集)画面にアクセスしてみましょう。
全てのtextareaが以下のようになっているはずです。

01

以上で実装は終わりです。
・・・が、全部が全部TinyMCEを適用したくなかったり余計な機能がありすぎるので逆に入力しづらいと思う人もいると思います。

そういった時のためにテキストエリア毎にTinyMCEのオプションを設定をしてみましょう。

TinyMCEの設定

任意のテキストエリアのみ適用

ではまずhtmlタグの使用が許可されている「詳細-メインコメント」に対してだけTinyMCEを適用してみましょう。
※事前に使用したいhtmlタグを「マスターデータ管理」の「mtb_allowed_tag」より設定しておいてください。

先ほどと同じく「data/smarty/templates/admin/products/product.tpl」を開き、「詳細-メインコメント」のtextareaタグを探します。316行目付近に記述があると思います。

該当のtextareaを見つけたら何か適当なID名を付与します。今回は仮に「id=”detail-maincomment”」とします。

<textarea id="detail-maincomment" name="main_comment" maxlength="<!--{$smarty.const.LLTEXT_LEN}-->" style="<!--{if $arrErr.main_comment != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->" cols="60" rows="8" class="area60"><!--{"\n"}--><!--{$arrForm.main_comment|h}--></textarea>

次に先ほど<script>末尾に記述したTinyMCEのselectorオプションを編集します。

tinymce.init({selector:'textarea#detail-maincomment'});

こうすることで「detail-maincomment」IDを持つテキストエリアのみTinyMCEが適用されます。

02

オプションを設定する

TinyMCEでは特に指定がない場合、様々な機能がデフォルトで付与されていますが、不要な項目に関しては予めこちらで外してあげたほうが親切ですよね。
オプションを指定して不要な項目を外したり、足りないものを追加したりしてみましょう。

日本語化

まずTinyMCEを日本語化してみます。
日本語化するにはオプション指定する前に日本語の翻訳ファイルをダウンロードしてくる必要があります。

TinyMCE公式サイトから「Download」→「Additional Download」→「Language Packages」へ移動します。

03

様々な言語の一覧が表示されるので、その中から「Japanese」を探し、「Download」ボタンをクリックしてファイルをダウンロードします。

ダウンロードしたファイルを解答すると「ja.js」というファイルが入っていると思うのでそのファイルを「/js/tinymce/js/tinymce/langs/」の中に設置します。
※CDNを利用している場合はどこか適当な場所に設置してください。

product.tplに戻り、TinyMCEの記述に「language: “ja”」を追加します。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja"
});

CDNを利用している人は先ほどダウンロードした言語ファイルの場所を別途指定する必要があります。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    language_url: 'http://xxxxx/tinymce/langs/ja.js'
});

これで日本語化できていると思います。確認してみましょう。

「ファイル」「編集」「表示」…のようにちゃんと日本語化できていることが確認できます。

メニューバーを削除

TinyMCEのメニューバーと呼ばれるエリアには様々な機能がありますが、今回は不要なので削除します。

「menubar」オプションを「false」とするだけです。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false
});

エディター上部にあったエディターが無くなったのが確認できると思います。

ステータスバーを削除

エディターの下部には現在選択しているhtmlタグが何なのかを表示してくれる「ステータスバー」があります。

06

別に削除する必要は無いとは思いますが、より見た目をシンプルにするために削除してみましょう。
「statusbar」オプションを「false」とします。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false
});

これでエディター下部からステータスバーが無くなりました。

07

ツールバーの内容を変更する

メニューバーの下にあるツールバーと呼ばれるワンクリックで様々なhtmlタグを呼び出せるエリアがあります。次はここの内容を変更してみます。

08

デフォルトでは上記のように「戻す」「やりなおす」「書式スタイル」「太字」「斜体」「左揃え」「中央揃え」「右揃え」「中央揃え」「箇条書き」「番号付き箇条書き」「インデントを減らす」「インデントを増やす」が用意されています。

今回はこれを「太字」「斜体」「箇条書きリスト」「番号付き箇条書きリスト」の4つに機能を絞ってみます。

「toolbar」オプションに必要な機能の名前を入力します。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    toolbar: "bold italic | bullist numlist"
});

機能ごとを半角スペースで区切り「|」を入れることでツールバー内に区切り線を入れることが可能です。

09

だいぶスッキリしましたね。
削除ではなく追加したい場合は公式サイトの下記ページを参考に記述してください。

オリジナル要素ボタンを追加する

例えば特定のクラスやIDを含んだ要素を入力して欲しいけど入力する人の知識が乏しい場合にソースコードを触ってもらうのは難しい・・・といった時は、それ専用のボタンを用意してワンクリックで出力できるようにしてあげましょう。

例として「btn」クラスを持つa要素

<a class="btn">リンクボタン</a>

をボタンとして追加します。

まずsetupオプションに下記の記述をします。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    toolbar: "bold italic | bullist numlist | orgbutton",
    setup: function(editor){
        editor.addButton('orgbutton', {
            text: 'リンクボタン',
            onclick: function(){
                editor.insertContent('<a href="#" class="btn">リンクボタン</a>');
            }
        });
    }
});

上から順に説明していくと、「addButton」で第一引数に任意のボタン名を設定します。今回は「orgbutton」とします。

そして第二引数にボタンの詳細を設定していきます。
「text」は表示されるボタンテキストになるので「リンクボタン」とします。
※「image」を指定し、テキストではなく画像とすることも可能です。

「onclick」はクリックされた時に行う処理を記述します。
エディターに対して要素を追加するので「editor.insertContent」とし、引数に追加する内容を記述します。

ここまでできたら「toolbar」オプションの適当な場所にaddButtonで指定した任意のボタン名を入れてあげることで、設定したボタンがツールバーの中に追加されます。

上記の結果が下記になります。

10

複数のオリジナル要素をひとつのボタンにまとめる

オリジナル要素のボタンをツールバーに追加することができましたが、オリジナル要素が他にも沢山あって最終的にツールバーが2段、3段になって収まりが悪い・・・といった場合、要素をまとめて1つのボタンの中に収めてしまいましょう。

先ほどと同じくsetupにaddButtonでボタンを追加するまでは一緒ですが、今度は「type」と「menu」をオプションに追加しましょう。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    toolbar: "bold italic | bullist numlist | orgbutton",
    setup: function(editor){
        editor.addButton('orgbutton', {
            type: 'menubutton',
            text: 'パーツセット',
            menu: [
            {
                text: 'リンクボタン',
                onclick: function(){
                    editor.insertContent('<a class="btn">リンクボタン</a>');
                }
            },
            {
                text: 'テーブル',
                onclick: function(){
                    editor.insertContent('<table><thead><tr><th>ヘッド要素</th><th>ヘッド要素</th><th>ヘッド要素</th></tr></thead><tbody><tr><th>見出しセル</th><td>テキスト</td><td>テキスト</td></tr></tbody></table>');
                }
            }
            ]
        });
    }
});

「type」に「menubutton」を指定し、「menu」の中に更にボタンの内容を記述していくといった感じです。

上記の結果が下記になります。

11

「パーツセット」というボタンが追加され、それをクリックすると中にグループ化したボタンが表示されます。
これでたくさんオリジナル要素があってもスッキリまとめられますね。

エディターにcssを読みこませる

エディター内の見た目を実際に出力する画面と同じ見た目にしたほうが入力する人も分かりやすくて良いですよね。

そういった時は「content_css」オプションを指定します。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    toolbar: "bold italic | bullist numlist | orgbutton",
    setup: function(editor){
        editor.addButton('orgbutton', {
            type: 'menubutton',
            text: 'パーツセット',
            menu: [
            {
                text: 'リンクボタン',
                onclick: function(){
                    editor.insertContent('<a class="btn">リンクボタン</a>');
                }
            },
            {
                text: 'テーブル',
                onclick: function(){
                    editor.insertContent('<table><thead><tr><th>ヘッド要素</th><th>ヘッド要素</th><th>ヘッド要素</th></tr></thead><tbody><tr><th>見出しセル</th><td>テキスト</td><td>テキスト</td></tr></tbody></table>');
                }
            }
            ]
        });
    },
    content_css: '/test/ec-cube/user_data/packages/admin/css/admin-product-tinymce.css?' + new Date().getTime()
});

cssを更新しても全然反映されないって人はcssファイル名の後ろにURLパラメーターを渡してキャッシュを回避してあげてください。

12

これでエディター内の見た目も実際の画面と近くなりだいぶ分かりやすくなりましたね。

エディターの高さを変更する

先ほどのスタイルをあてた画面をみると分かりますがデフォルトのエディターの高さのままだと低すぎてせっかく見た目を合わせても台無しです。
そこで「height」オプションを指定して高さを設定してあげましょう。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    toolbar: "bold italic | bullist numlist | orgbutton",
    setup: function(editor){
        editor.addButton('orgbutton', {
            type: 'menubutton',
            text: 'パーツセット',
            menu: [
            {
                text: 'リンクボタン',
                onclick: function(){
                    editor.insertContent('<a class="btn">リンクボタン</a>');
                }
            },
            {
                text: 'テーブル',
                onclick: function(){
                    editor.insertContent('<table><thead><tr><th>ヘッド要素</th><th>ヘッド要素</th><th>ヘッド要素</th></tr></thead><tbody><tr><th>見出しセル</th><td>テキスト</td><td>テキスト</td></tr></tbody></table>');
                }
            }
            ]
        });
    },
    content_css: '/test/ec-cube/user_data/packages/admin/css/admin-product-tinymce.css?' + new Date().getTime(),
    height: "600"
});

視える範囲が拡大されてさらに見やすくなりました。

13

画像アップローダーを追加する

最後にエディター内に画像をアップロードして貼り付けられるようにしてみましょう。

TinyMCEのデフォルトには画像に関するボタンを設定されていないので、まずプラグインとして追加してあげる必要があります。

「plugins」オプションに「image」を指定した後、「toolbar」にも「image」を指定します。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    plugins: [
    "image"
    ],
    toolbar: "bold italic | bullist numlist | image"
});

これで画像ボタンが追加されたのが確認できると思います。

14

ただしこの画像ボタン、内容としてはサーバー上にアップしている画像のパスを指定して貼り付けるというだけで、ここから画像をアップする機能は付いていません。

15

さすがにこれだと使えたものではないので、別途アップローダー付きのプラグインを実装します。

アップローダー付きプラグインは探せば色々あるのですが、今回は「jbimages」というプラグインを使用します。

サイト内の「Download@Github」ボタンよりファイルをダウンロードし、「/js/tinymce/js/tinymce/plugins/」に「jbimages」というディレクトリを作成してその中に解凍したファイルを全て設置します。

設置が済んだら先ほどの「plugins」と「toolbar」の記述に「jbimages」を追加します。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    menubar: false,
    statusbar: false,
    plugins: [
    "image jbimages"
    ],
    toolbar: "bold italic | bullist numlist | image jbimages"
});

これで先ほどの画像ボタンの隣に新しくアップローダー付き画像ボタンが追加されていると思います。

16

17

このアップローダーはデフォルトの画像のアップロード先を「/images」としていますが、このアップロード先を変更するにはアップしたプラグインファイルの中の「config.php」を編集します。

編集する箇所は41行目付近の下記になります。

$config['img_path'] = '/images'; // Relative to domain name

※お使いのサーバーによってはアップロード先のディレクトリのパーミッションを変更する必要があるので要注意です。

感のいい人は薄々分かっていると思いますがCDNを利用している場合は日本語化の時と同じく、上記の設定ではプラグインが適用されませんので「external_plugins」オプションにURLを指定してあげる必要があります。

tinymce.init({
    selector:'textarea#detail-maincomment',
    language: "ja",
    language_url: 'http://localhost/test/ec-cube/js/tinymce/js/tinymce/langs/ja.js',
    menubar: false,
    statusbar: false,
    plugins: [
    "image jbimages"
    ],
    external_plugins: {
        "jbimages": "http://www.groomerchick.com/smartagon_sys/cdn/tinymce_v0-2-4_01/plugins/jbimages/plugin.min.js"
    },
    toolbar: "bold italic | bullist numlist | image jbimages"
});

※この場合のアップロード先の変更がどう指定するのか分かりませんでした・・・

最後に

いかがだったでしょうか?
使い方によっては商品登録ページにかなり柔軟な項目の追加が可能になるかと思います。

TinyMCEのオプションに関してはかなり多岐にわたって設定が可能かと思いますが、ドキュメントは英語のみですし、検索してもWPのTinyMCEについての記事ばかりがヒットしてしまうため、なかなか把握するのが難しいですが今後EC-CUBEに限らず色々な場面で活用していけると良いのではないでしょうか?

寝苦しい夜に体験すべきVRホラー特集

$
0
0

どうも吉塚のポケモンおじさん兼VRおじさんことムラタです。

最近だいぶ涼しい日も増えてきて過ごしやすくなってきた今日この頃ですが、まだまだクーラーに頼ることもあるのではないでしょうか?

クーラーをガンガンに効かせた部屋で涼むのもいいですが、ちょっと趣向を変えて「VRホラーコンテンツ」を体験することで肝から体を冷やしてみてはいかがでしょう。

VRコンテンツを楽しむにあたって

VRコンテンツを楽しむにあたって当然それ専用の機材が必要になってくるのですが、有名どころでいえば「Oculus Rift」や「HTC Vive」、まだ発売されていませんが「PlayStation VR」などがあります。

これらの商品はどれも専用のコンテンツが用意されておりハイクオリティなVR体験が可能ですが、当然その分高額でちょっとVRを体験したいというだけで気軽に買えるものではありません。

そこで今回は以前の記事『全天球撮影を始めよう』でもご紹介した、非常に安価で購入できる「Google CardBoard」とスマホの組み合わせで、お手軽に体験できるホラーVRをメインに紹介していきたいと思います。

全天球撮影を始めよう

Youtubeで体験できるVRホラーコンテンツ

Youtubeでは2015年よりVR動画に対応しているので沢山のVR動画が既にアップされています。

そんなVR動画をGoogle CardBoardで楽しむには以下の手順になります。

1.Youtubeアプリから動画にアクセスする

当然ですが、Youtubeの動画になるのでYoutubeのアプリをダウンロードしておく必要があります。

閲覧している動画がVRに対応している場合は画面右下に眼鏡のようなGoogle CardBoardのアイコンが出ているのが出ているのが分かると思います。

2.GoogleCardBoardモードで閲覧

前述のアイコンをタップすると画面が二つに分かれてVRモードへと移ります。

02

この状態でスマホをGoogleCardBoardへセットして閲覧します。

07

このVRモード中は画面タップでの操作ができなくなるので、視点を操作したいメニューに合わせたうえで、上の写真にも写っていますがGoogleCardBoardの右側の銀色の部分を押しこむことで操作することができます。

※※VRを安全に楽しむために※※

VRを体験する際はなるべく周りに物がない環境で行いましょう。
特に足元に物などが散乱していると体験中うっかり踏んづけてしまって非常に危険です。

また、より没入感を高めるためにヘッドフォンを装着することをお勧めしますが、完全に外界の音をシャットダウンしてしまってはなにかあった際に察知が遅れる可能性があるので気を付けましょう。

最後にGoogleCardBoardでは微妙に外の光が画面に入り込んでしまうので、より雰囲気を楽しみたい人は部屋を暗くしてお楽しみください。

【360度動画】ホラーな世界を疑似体験「後ろの正面だあれ…?」夜の小学校に潜む影

09

実写ではなくCGアニメーションでのVR作品です。夜の学校で男性教諭を襲う恐怖を体験できます。

恐怖度:★★

360° VRホラードラマ 怨みの家 4K(立体音響)

03

タイトルに「4K」とある通り、かなりの高画質で閲覧することができますが、PCに限った話でスマホで観る分にはそこまで画質は上げられず、おまけにGoogleCardBoardで見ると結局他の動画変わらない画質といった感じに・・・。

動画は13分あるものの、ホラー的な要素が始まるのは10分あたりからでそれまで特に場面の移動もなくずっと同じシーンを見続けないといけないのが×。

恐怖度:★

10 Years of Horror Nights

12

椅子に縛られた人の視点で両隣の人たちがマッドサイエンティストぽい人に実験されてる様子を見せつけられるという内容。

一部画面の明滅が激しくなるところがあるので人によってはちょっとつらいかも。

恐怖度:★★★

VR Horror Experience – Don’t Breathe 360 Degrees

07

今年8月にアメリカで公開されたホラー映画「Don’t Breathe」のプロモーション動画で、暗闇の中盲目の殺人鬼からタイトル通り息を殺して身を隠す主人公たちと同じ目線で体験できます。

動画の時間は約2分と短いですが映画の雰囲気がよく分かる映像だと思います。

個人的に面白そうな映画ですが日本公開は未定。

恐怖度:★★

『死霊館 エンフィールド事件』360度動画

06

実話をもとにして制作されたホラー映画「死霊館 エンフィールド事件」の舞台となった家の中を体験できるといった内容。

恐怖度:★★★

360 VR Horror Video – HORRIBLE DREAM. VR INTERACTIVE HORROR MOVIE 4K

08

寝ている男性の視点で、いかにもな女性の幽霊がじわじわと迫ってくるという内容。
実際に仰向けの状態で見るといいかも?

恐怖度:★

360°VR動画 幽霊を探せ!!ホラー「友引」あなたは何回見つけられる?

13

部屋の中に現れる幽霊を探すというコンセプトの動画。いつもの向こうからビビらせて来る系では無いので、怖がりの人にはちょうどいいかも?

ちなみに合計4体いるそうです。

恐怖度:★

Interactive Paranormal Activity Seance (360 Degree Video)

11

映画「パラノーマルアクティビティ」

恐怖度:★★★

アプリで体験できるVRホラーコンテンツ

スマホとGoogleCardBoardで楽しめるもう一つのコンテンツとしてVRアプリがあります。

自分がAndroid端末を持っていないため今回もAppStoreのアプリ限定となってしまいますが、いくつかご紹介します。

Within(catatonic)

04

色々なVR映像が楽しめるアプリで、その中のホラーコンテンツの1つ「catatonic」

車椅子に縛り付けられた男の視点で精神病棟の中を連れまわされるといった内容です。
薄暗い病院というだけでも十分怖いですが、周りの異常な人たちや声がより恐怖を感じさせます。映像の中の男と同じように椅子に座って観るのがおススメ。

恐怖度:★★★★

Insidious VR

05

こちらはホラー映画「Insidious:序章」を題材とした映像らしいです。映画は観たことないですが別に観ていなくてもコンテンツは楽しめました。

内容としては部屋の中で起きる様々なポルターガイスト現象を体験するといった感じですが、どこでどんな現象が起きてるのか視点をぐりぐり動かしてこちらから探しにいく羽目になっているので、あまり恐怖感は感じませんでした。

恐怖度:★★

Sisters: A Virtual Reality Ghost Story

20

3DCGによる作品で姉妹の人形が引き起こす怪奇現象を体験するというアプリ。
画面が暗すぎるせいか何か起きててもあまりよく分からないという事態に・・・
終始目を凝らしているので怖いというより疲れます。

ちなみにこのアプリもうひとつコンテンツが収録されており、映画「ブレアウィッチ」のプロモーション映像?もありますがこちらも画面が暗く廃墟の周りの森を眺めてる間に唐突に終わるというよく分からない内容になっています。

恐怖度:★★

最後に

いかがだったでしょうか?

ホラーとVRは相性が良いというのもあってホラー映画のプロモーションとしてのコンテンツが多かったように思います。

来月にはPlaystation VRも発売となり、ついに「Oculus Rift」「HTC Vive」「Playstation VR」の3機種が揃い、いよいよVR業界も活気づいてくると思います。

もし今回の記事でVRに興味を持たれた方がいれば、3機種のうちのどれかを購入しより高いレベルのVR体験をされてみてはいかがでしょうか?

意外と色々あるベジフルスタジアムの話

$
0
0

どうも、念願のPS VRを手に入れサマーなレッスンを興じるも5分もたたず酔ってしまいセブンデイズどころじゃないムラタです。

そんなVRとは全く関係ないのですが、今回は平成28年2月12日に福岡アイランドシティに開場したベジフルスタジアム(正式名称:福岡市中央卸売市場青果市場)についてご紹介したいと思います。

ベジフルスタジアムとは

概要

もともと福岡市には博多区の青果部市場・西区の西部市場・東区の東部市場の3か所が存在していたのですが、青果部市場への一極集中による西部・東部市場の機能低下や青果部市場の老朽化などの問題があげられていました。

それらの問題を解決するために3市場統合してアイランドシティに開場したものが「ベジフルスタジアム」というわけです。

名前の由来は青果物を表すベジタブルとフルーツを掛け合わせたものらしいです。まぁそのままといえばそのままですが。

アクセス

バスで行く場合は「ベジフルスタジアム前[新青果市場]」というバス停が目と鼻の先にあるのでそこを利用しましょう。

ただ基本的に1時間に1本程度しかバスはないので帰りの時間は事前にチェックしておきましょう。

車で向かう場合はスタジアム内に駐車場があり、2時間までは無料、以後60分毎に100円(上限500円)となっているので、そこを利用するのがベストでしょう。

ちなみに駐輪場も大きくはないですが、ちゃんと用意されているので自転車やバイクも無料で停めることが可能です。

施設

01

青果市場なんて一般の人が行っても特にすることないんじゃない?とか、そもそも入場していいの?とか思ってる人もいるかと思いますが、ベジフルスタジアムでは市場関係者だけでなく一般の方も普通に入場できますし、実は色々見学したりお買い物したりもできるんです。

ベジフルスタジアムは2階建ての施設で「市場会館棟」「卸売場東棟」「卸売場西棟」の3つのエリアに分かれていて、市場会館棟の1階では普通にお買い物や食事をとることも可能です。

なんだったらコンビニだってあります。(営業時間は3時~19時)

02

■お買い物

この市場会館棟でお買い物できるお店ですが、「ベジフル」だから果物とか野菜ばっかりなんでしょ?とか思ってないですか?

03

むしろ逆です。なぜか常設の店舗では果物や野菜は売っておらず、干物・乾物や鮮魚や花、お店によっては熊本産の馬刺しなんかも売っていたりします。

個人的にはお菓子の卸問屋で箱ごと購入できる駄菓子なんかが気になります。

ただし、これらのお店は早朝から開いているということもあり、午後には閉まってしまうことが大半です。

基本的にベジフルスタジアムは午前中に行くのが良いでしょう。

■飲食

1階中央ホールにはラーメン屋や喫茶・定食、海鮮丼などの飲食店があり、ラーメン屋と定食屋に関しては市場関係者の為に早朝から営業しています。

04 05

特におすすめなのが「博多割烹ひだまり ROASTBEEF 青果市場店」の「ローストビーフ丼」です。

レア感の残るピンク色のローストビーフがごはんの上に盛られてその上に温泉卵が乗っかったものですが、本当に美味です。(ちなみに今回早朝のため開いておらず写真はありません)

1階中央ホールの階段から2階に上がったところには「マルシェのうまみ」というカフェ&レストランがあり、広々とした空間でアイランドシティの景観を眺めながらの食事が楽しめます。

06 07

■その他の施設

市場会館棟の2階には旬の野菜を使った「ベジフルクッキング」という料理教室を行うための施設や、残留農薬検査を行っている様子を自由に見学できる衛生検査所などもあります。

08

「せり」を見学しよう

ベジフルスタジアムでは「セリ」も一般公開しているので自由に見学することができます。

セリといえば魚市場をイメージする人が多いと思いますが、青果市場のセリも同じような熱気を感じることはできます。

セリをしているかどうかは農林水産局のHPより休開場カレンダーをチェックしておきましょう。

■時間

セリが行われる時間は魚でも青果でも同じく早朝からとなります。

ベジフルスタジアムでは朝7時からだいたい8時くらいまで行われています。

■見学用通路

セリは卸売場東棟で行われるのですが、当然ながら1階からは関係者以外立ち入り禁止です。

見学する場合は市場会館棟の中央ホールから2階に上がり、渡り廊下を通って東棟2階の見学者用通路に出る必要があります。

09 10

なお通路内では

  • 指定場所以外での喫煙
  • 指定場所以外での飲食
  • 市場関係者が出入りするエリアへの立入り
  • 市場関係者の業務を妨害するような行為
  • セリ中における市場関係者へのフラッシュ撮影

これらの行為が禁止されているので必ず守るようにしましょう。特にフラッシュはうっかり炊いてしまうことが多そうなので要注意です。

見学者用通路ではところどころにセリに関する用語や知識が掲載されていてるので、全部チェックしてみるとよりセリが楽しめるかもしれませんね。

11

12

いたるところでよくテレビ番組とかで観るセリの掛け声が飛び交います。
ことばの意味は分からんがとにかくすごい活気です。

13

ちなみに今回はみかんや柿、マツタケ、キュウリやキャベツなどのセリが行われてました。

果物なんかはどれも試食できるようになっているんですね。

毎月第三土曜日は「ベジフル感謝祭」

ベジフルスタジアムでは毎月第三土曜日に「ベジフル感謝祭」と呼ばれるイベントを市場会館棟の中央ホールで行っており、常設販売していない野菜や果物を購入することができます。

ちなみにイベントは朝10時よりとなっていますが、普通に9時過ぎあたりから購入することができました。

14

ベジフル感謝祭では毎月販売する商品は変わるそうですが、今回はマツタケなどのキノコ類、りんごや梨、柿、ブドウなどの秋の味覚が目立ちました。

特にミカンの詰め放題300円は小ぶりで一見酸っぱそうでしたが味は甘く美味しく、それなりの量を詰め込めれるのでかなりお得だったと思います。

15

また感謝祭では抽選会も行っており、お買い物の合計金額1000円につき1回抽選することができます。(感謝祭での購入だけでなく周りの店舗での購入も可?)

商品を購入した際は忘れず抽選券をスタッフに渡しましょう。

16

抽選会の景品ですが、今回は

  1. メロン
  2. りんご
  3. 干物セット
  4. 干しシイタケ
  5. 釜飯の素
  6. 和風わかめスープ…etc
  7. めんたい辛子高菜…etc

こんな感じでした。すごい高級なものが当たるとかではないですが、1位のメロンなんかは買うとそれなりのお値段がするものなので、やってみて損はないんじゃないでしょうか。

ちなみにハズレは飴ちゃん1個です。

最後に

いかがでしたでしょうか。
思っていたより色々あるなと思いませんか?

卸売市場と聞くと関係者以外は全く縁のない場所というイメージですがベジフルスタジアムはそんなイメージを払拭してくれる施設ではないでしょうか。

皆さんも海の中道に行く途中に寄る程度でもいいので一度足を運んでみてください。

それでは宮本ひかりちゃんとのレッスンに戻るので今回は以上です。

Google VR Viewで360°コンテンツをサイトに埋め込む

$
0
0

こんにちは、FF10以来久しぶりにFF新作を買ったムラタです。
発売される前も後も色々辛口な評価が目立ったFF15ですが、やってみると腐ってもFFですね、普通に楽しくてどっぷりはまってしまってます。

さて、今回は360°の写真や動画をwebサイトに取り込んでコンテンツとして活用する事例をご紹介したいと思います。

前回の全天球撮影についての記事もあわせてご覧ください。

全天球撮影を始めよう

Google VR View

サイト内に360°コンテンツを埋め込むにあたって、普通の写真のようにimgタグで張り付けただけでは当然360°グリグリ動かすような処理にはなりません。

01

このように何だか引き伸ばされたような画像が張り付けられるだけです。

360°コンテンツとしてサイトに埋め込むにはWebGLと呼ばれるweb上で3次元グラフィックス(3Dコンテンツ)を表示させるための技術を用いる必要があります。

webGLを実装するにあたって「three.js」のような構築をサポートしてくれるライブラリも存在しますが、自分のようなちょっとjavascriptscriptをかじった程度のポンコツが実装しようとするにはまだまだハードルが高すぎるのが現実です。

そこで助けてくれるのが「Google VR View」です。
いつものGoogle大先生です。

このGoogle VR Viewを使うことで数行のコードを追加するだけで簡単にサイト内に360°コンテンツを実装することができます。

対応ブラウザ

当然どのブラウザでも実装可能というわけではないので要注意です。

  • 最新VerのChromeとOpera(Windows、macOS、Linux、Android、iOS)
  • 最新VerのSafari(macOS、iOS)
  • 最新VerのFirefox(Windows、macOS、Linux)
  • 最新VerのIE11とEdge(Widnows)

iOSは8以上、Androidは4.4(Kit Kat)以上であればなにも問題なさそうです。

サポートフォーマット

360°画像と動画をサポートしており、それぞれモノスコープとステレオスコープにも対応しています。

モノ」と「ステレオ」についてですが、
モノは単一の360°写真や動画を閲覧するもので、ステレオは2つの写真や動画を並べて表示することでGoogleCardBoardなどのヘッドセットで閲覧すると立体視によるVRが可能になります。

画像

360°画像のフォーマット

  • png、jpg、gifのいずれか。できればjpgが望ましい。
  • サイズ比はモノの場合は2:1(例:2048×1024)で、ステレオの場合は1:1(例:4096×4096)推奨。

360°動画のフォーマット

  • 動画形式はh264エンコードしたmp4形式。
  • アスペクト比は画像と同じくモノは2:1、ステレオは1:1推奨。
  • 古いデバイスの中には1080p(1920×1080)を超える動画をデコードできないものがあるので、最大限の互換性と品質を優先する場合は、1920×1080のモノ動画と2048×2048以上のステレオ動画の両方を提供することをお勧めする。

360°コンテンツの用意

今回撮影については詳しく触れませんが、Googleが紹介している撮影するためのデバイスは下記の2つです。

Cardboard Camera

Googleが提供する360°写真を撮影・鑑賞できるアプリになります。
ガイドに沿ってぐるっと一周撮るだけで自動で360°写真を生成してくれるのでスマホさえあれば今すぐにでも始められるのが嬉しいですね。

Richo Theta

はい、いつものやつです。パノラマ撮影専用カメラの中では比較的安価で簡単手軽に360°撮影が可能になるアイテムです。
ちなみに最近「Theta S」より1万円くらい安くなった廉価版の「Theta SC」も出ました。

実装

それでは実際にサイトに埋め込んでいきましょう。

iframeで埋め込む

ただ埋め込むだけであれば非常に簡単です。
下記のiframeのコードを埋め込むだけでできてしまいます。

<iframe width="100%" height="400" src="//storage.googleapis.com/vrview/index.html?image=パノラマ写真のパス/xxx.jpg"></iframe>

googleが提供しているファイルに対してパラメータで360°コンテンツのパスを指定するだけなので、こちらは写真もしくは動画を用意するだけで済みます。
写真(動画)パスのパラメーター以外にも様々なパラメーターを指定することができますが、それは後程説明します。

この方法だと手っ取り早くて楽ですが、この場合サーバーがクロスドメインを許可している場合に限ります。
クロスドメイン制約は簡単に言えば今現在見ているページのドメインと異なるドメインからのAjax通信を制限するというものです。

これを回避するにはhtaccessファイルに「Access Control Allow Origin」の設定を行う必要があります。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin: "*"
</IfModule>

これでどのドメインからもAjax通信を許可できますが、さすがにどんなサイトからでもっていうのは不安ですよね。
そういう時は特定のドメインだけ指定してあげましょう。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin: "http://xxxxx.jp"
</IfModule>

これで「http://xxxx.jp」のドメインのみ通信を許可するようになりました。

自身のサーバーで出力する場合

htaccessが触れるサーバーじゃない、もしくは知識もないし下手にファイルを触りたくないという場合は自分のサーバーに必要なファイルをアップすることでも出力可能です。

まずGoogleのVR View Githubよりzipファイルをダウンロードしてきます。

01

zipファイルのダウンロードが完了したら展開して、中身のファイルをすべて自分のサーバーの適当なディレクトリにアップします。
また、VR Viewを出力させるためのhtmlファイルも別途用意します。

例として下記のファイル構成とします。

02

あとは先ほどと一緒です。
「vrview/index.html」内に「source/index.html」をiframeで読み込んで画像(動画)をパラメーターで渡します。

<iframe width="100%" height="400" src="../source/index.html?image=//xxxx.jp/source/images/test_stereo.jpg?is_stereo=true"></iframe>

ちなみに画像のパスは相対ではなく絶対パスで渡してください。

javascriptで出力

iframeではなくjavascriptで出力させる場合は、まず「source/build」より「vrview.js」を読み込んできます。

<script src="../source/build/vrview.min.js"></script>

次にVR Viewを出力させるための囲みを用意します。

<div id="vrview"></div>

そして、こうです

<script>
        var vrView;
        window.addEventListener('load', onVrViewLoad)
        function onVrViewLoad(){
            vrView = new VRView.Player('#vrview', {
                image: '../source/images/test.jpg',
                width: 500,
                height: 500,
                preview: '../source/images/preview.jpg'
            });
        }
</script>

結果は次の通りです。

どうでしょうか、PCならクリックしてドラッグすることで視点を360°ぐりぐり動かせると思います。
スマホの場合は画面をスワイプするかスマホ本体を傾けるだけで連動して画面の視点も変更されるはずです。

パラメーター

VR Viewには以下のパラメーターが用意されています。

  • video
    360°動画ファイルへのパスを指定する。「image」と「video」のどちらかは必ず指定する必要があります。
  • image
    360°画像ファイルへのパスを指定する。
  • width
    出力されるiframeの幅を指定します。
  • height
    出力されるiframeの高さを指定します。
  • preview
    360°画像(動画)が読み込まれるまで表示させる画像ファイルのパスを指定します。
  • is_stereo
    読み込む360°画像(動画)をステレオモードで読み込むかどうかを指定します。
  • is_debug
    trueを指定した場合、デバッグモードとなり画面左下にFPSメーターなどの表示が出力される。
    03
  • is_vr_off
    trueを指定した場合、画面からVRモードボタンを非表示にします。(スマホのみ)
    04
  • is_autopan_off
    trueを指定した場合、360°画像(動画)が読み込まれた際の左から右へカメラをパンする動きを停止する。(PCのみ)
    ※違う意味合いがあるかもしれないですが未確認です。
  • default_yaw
    デフォルトのカメラの向きを数値で指定します。
    05
  • is_yaw_only
    trueを指定した場合、ロールとピッチを防止します。ステレオモードのみ有効。とGoogleのガイドにはありますが、ちょっとよく分からなかったです。
    とりあえずスマホの際にカメラの向きが横方向にだけ固定されていました。(上や下を向けない)

VR Viewイベント

基本的な使い方は以上です、ここからはさらにプラスアルファの処理を行っていきましょう。

VR Viewは下記の4種類のイベントがあります。

  • ready
    VR Viewの出力の準備ができたタイミング。
  • error
    360°コンテンツのロードに失敗したタイミング。
  • click
    クリックしたタイミング(スマホではタップ、VRモードでは注視した場合)
  • modechange
    VRモードもしくはフルスクリーンモードに移行したタイミング。

例えばこのような感じ

var vrView;
window.addEventListener('load', onVrViewLoad)
function onVrViewLoad(){
    vrView = new VRView.Player('#vrview', {
        image: '../source/images/test.jpg',
        width: 500,
        height: 300,
        preview: '../source/images/preview.jpg'
    });

    vrView.on('ready', onVRViewReady);
}
function onVRViewReady(e){
    alert("読み込み完了");
}

ホットスポット

VR Viewでは「ホットスポット」と呼ばれる円形状の領域を生成して任意の位置に配置することができます。

ホットスポットはクリックやタップすることができ、VRモードでは注視した状態で任意の場所をタップすることでアクティブになります。

またホットスポットは追加する際に、サイズや不透明度、位置やIDなどを指定することができます。

  • pitch
    ホットスポットの高さ位置を指定します。
    06
  • yaw
    ホットスポットの横位置を指定します。
    07
  • redius
    ホットスポットの半径サイズを指定します。
    08
  • distance
    カメラからホットスポットまでの距離を指定します。
    09

この辺の設定は都度画面で確認しないと全く分からないので調整が面倒ですが、仕方ないですね・・・

これらのパラメータをまとめて書くとこのようになります。

function onVrViewLoad(){
    vrView = new VRView.Player('#vrview', {
        省略
    }
    vrView.on('ready', onVRViewReady);
}
function onVRViewReady(e){
    vrView.addHotspot('ID名', {
        pitch: 0,
        yaw: 0,
        radius: 0.05,
        distance: 1
    }
}

これでホットスポットの設置は完了です。
次はこのホットスポットにクリックイベントを設定してみましょう。

まずVR Viewイベントにクリックイベントを登録します。
先ほどの「ready」イベントの下に「click」を追加します。

vrView.on('ready', onVRViewReady);
vrView.on('click', onVRViewClick);

仮に「spot1」というID名のホットスポットをクリックした際にアラートを表示させるには下記のようになります。

function onVRViewClick(e){
    if(e.id == 'spot1'){
        alert("ホットスポット1がクリックされました!");
    }
}

いかがでしょうか?
ちなみにホットスポットは1つだけでなく複数個設置もできます。

複数のホットスポットと360°写真を組み合わせることで簡易的なオリジナルのGoogleストリートビューを作り出すことも可能です。

最後に

いかがだったでしょうか。
今まではパノラマ撮影しても個人的に楽しむだけでしたが、今後はwebサイトのコンテンツとしての可能性も出てきたのではないでしょうか。

それではまた新しいVRネタがあればお会いしましょう。

プレミアムフライデーについてのおさらいと実際にやってみた話

$
0
0

こんにちは、ポケモンGOに第二世代が追加されてまたもやポケモンおじさんになるも花粉症でうかつに外に出れないムラタです。

今回は先週の金曜から全国で実施されることになった「プレミアムフライデー」についての記事になります。

「プレミアムフライデー」って何?

そもそも「プレミアムフライデー」が何なのかご存知でしょうか?
大体の人は『月末金曜にちょっと早めに上がってもいいよ』的なふわっとした内容は知っているかと思います。

まあほぼこれで合ってるんで他にいうことないんですけど、具体的に言うと政府および経団連が中心に提唱・推進している取り組みで、毎月末金曜の午後3時には仕事を終えて、お買い物行くなり映画観るなり、いつもより豊かな生活を送りましょうってことらしいです。

あくまで推奨で強制ではないのですが、一部の人を除くほとんどの人が「3時に上がれるわけないし、上がったところでその分後で皺寄せがくるだけ」と思ってるのではないでしょうか。自分もそう思います。

ちなみに参加した企業は2月24日の時点でおよそ3,930社らしいのですが、これは日本全体の企業の0.1%にあたるそうです。

そして産経新聞によると23日時点で早帰りなどの取り組みが確認できた企業はたったの120社程度だそうです。

完全に極々一部の企業しか実際に取り組めてないようですね。

各大手企業の取り組み

ではその限られた企業様の取り組みを一部見てみましょう。

大和ハウス

偶数月の最終金曜日が対象。当日は就業時間を1時間早めて8~17時に変更。午後は半日有休とするそうです。

またプレミアムフライデー以外にも偶数月の最終月曜の午後を有休にする「プレミアムマンデー」も実施するようです。こちらは週末が繁忙期となる住宅業に携わる営業社員向けの取り組みだそうです。

ソフトバンク

毎月末最終金曜の午後3時退社を推奨とする取り組み。その他にも「Smart & Fun!支援金」と呼ばれる制度で毎月1万円支給などもあり。

森永製菓

毎月末金曜日の全日もしくは午後に有給休暇を取得することを推奨。対象はパートを含む全従業員。該当日は会議や行事・イベントを減らす方針らしいです。

またプレミアムフライデー用のサイトも用意されていて、家族で楽しく作れるお菓子のレシピを掲載しています。

住友商事

プレミアムフライデー当日を全休・午後半休取得奨励日とする。
有給休暇取得が難しい場合は、フレックスタイム制度を活用しコアタイム終了時刻(15時)の退社を奨励。

また、「プレミアムフライデーズ」として月末金曜に限定せず、その他の金曜も同じく有給休暇取得・フレックスタイム退社奨励日とするそうです。

事前調査

調査会社のインテージがプレミアムフライデーを実施するかどうかの調査を事前に行ったところ奨励・実施することが決まっている職場はわずか2.5%で「未定」と答えたの76.6%にものぼるそうです。

いかにわずかな企業しか導入できない、もしくは導入が難しいか分かりますね。
また、実際にプレミアムフライデーを行えるとしたら何をしたいかというアンケートでは「自宅で過ごす」が49.9%でほぼ半数を占める結果になっています。

個人消費を促すための経済対策とは裏腹に買い物や食事はせずに家でのんびり過ごす人がほとんどみたいです。経済効果5,000億円超とはいったい・・・

福岡のプレミアムフライデーの取り組み

プレミアムフライデー公式サイトでは取り組みを行なっている会社や店舗の情報を一覧で見ることができます。

実際にはここには登録していない店舗はもっと沢山あるのでしょうが、全然少ないといった感じですね。

この記事を書いている28日現在でもまったく追加もされていないようですし、果たして今後どれくらい普及するのでしょうか。

実際にプレミアムフライデーを実行してみた

実際にプレミアムフライデーを2月24日に実践してみました。

退社(15:00)

まず3時に退社ですが、12時にお昼に入って1時に戻ってくるともう残り2時間しか作業時間がなく、かなり焦燥感に駆られます。お昼2時間しか作業しないのであればもういっそのこと半休取ってしまった方がとか思います・・・

また、社内で一人だけプレミアムフライデーを実行すると、退社時の気まずさが半端ないですね。

自分みたいなメンタルが弱い人間はできれば複数人で取りたいものです・・・

天神へ(15:30)

大丸や三越、天神地下街などで色々プレミアムフライデーのサービスを行っているそうなので天神にやってきました。

普段平日の天神に行くことがほとんどないので、人が多かったのかどうか分からないですが、体感的にたぶん普段と全然変わらなかったと思います。

天神地下街

まずは天神地下街ですが、公式サイトによると結構なお店がプレミアムフライデーのサービスを行なっているそうなのですが、実際行ってみるとお店にそういった看板やPOPがでている訳でもなく、何かサービスを行なっているのかどうかさっぱり分かりませんでした。

またお店側もまだ様子見なのかあんまりパッとしたサービスも無いように感じました。ポイントが2倍とか3倍とかそんなものばっかりといった印象です。

普段よく行く人にはお得感があるのかもしれませんが・・・

大丸福岡天神

大丸ではドリンク一杯無料だったり、プレミアムなシャンパンがお得な値段で飲めたり、めんべい掴みどりだったり色々イベントを行っていました。

自分はデパ地下の方にしか行っていないですが、デパ地下でも多くの商品がプレミアムフライデー用のお得な商品が売りに出されていて、普段より少し人の数も多かったように感じました。

ただ、その集まっている人のほとんどがご高齢の方だったり主婦だったり、プレミアムフライデーを利用して立ち寄った感じのある人はほぼいなかった気がします。

ちなみに自分は糸島でメロンパンが有名らしいカシェットのメロンパン4個入り1080円が先着50名だったので主婦層に紛れて並んでみました。

内容は生クリームメロンパンが2つとチョコクリームメロンパンが2つの合計4つで、通常1個300円するらしいのでまあ200円くらいは得したのでしょうか。

美味しかったですけど一人で食う量じゃないなと思いました。量を選ばせてくれたらよかったんですけど・・・

帰宅(16:30)

メロンパン買った後はすぐ帰って家でのんびりしていました。
なんでしょう。15:00からって中途半端というか正直微妙な時間な気がします・・・

ご飯を食べるにはまだ早いし、どこか日帰りで旅行に行くような時間でもない。まあ泊まりでの旅行ならいいんでしょうけど。

街に出てきてもそこまで魅力的なサービスがあるわけでもないので、結局ちょっとぶらぶらして帰るくらいしかないなあと思いました。
※あくまで個人的な見解です。

直前調査でも半分の人が自宅で過ごすと答えたし、あの安倍総理もプレミアムフライデーは座禅組んで過ごしたらしいので、別に無理して外出てお金使うより家でのんびり過ごした方が政策的にはアレですけど一番有意義じゃないでしょうか?

なのでせっかく一人だけ3時にあがったのに大したことせずにさっさと家に帰ったとして全然全く正常だということです。

最後に

今回の残念な結果に終わったプレミアムフライデーですが、やはり3時からという中途半端な時間と実際にそれを実行する難しさがネックだと思いました。

自分が来月以降からプレミアムフライデーを実行することはなさそうですし、社会全体的にも浸透しそうにない制度だなと思うのですが、早く帰るということ自体は良いことなので、3時は無理でも金曜くらいは定時ちょうどに上がれるようにしていきたいですね・・・。


今一番キてるらしいSNS「マストドン」について

$
0
0

こんにちは、ようやく花粉の時期が終わり最幸な気持ちなムラタです。

今回は最近SNS業界でビッグウェーブになりつつあるSNS「マストドン(Mastodon)」についてご紹介したいと思います。

マストドンってなに?

Twitterと同じようなようなサービスを個人や企業などが個別に運営できるオープンソース型SNSで、ドイツのオイゲンさんという方が開発されたそうです。

日本では4月13日にyahooニュースにて紹介されてから注目されはじめていて、利用者は爆発的に増えています。

最大の特徴としてオープンソースであるということから、FacebookやTwitterのように1社が独占してサービスを提供する形ではなく、サーバーとある程度の知識があれば個人や企業など誰でもマストドンを提供する側になれるというわけです。

ちなみに「マストドン」とは約4,000万年前から11,000年前に生息していたとされるゾウやマンモスなどの大型哺乳類の総称だそうですが、正確にはオイゲンさんが同名のバンドのファンで、マストドンという名前が凄いクールに感じたらしくそこからとったらしいです。

まあ特に深い意味は無いということなんでしょうか。

Twitterとの違いって?

機能的にはTwitterと同じ感じで、決められた文字数内でメッセージを書いたり、画像を添付したりできるのですが、下記のような違いがみられます。

文字数の違い

Twitterでは文字数140文字までですが、マストドンでは500文字まで入力することができます。そんな使う事あるんですかね・・・

機能は同じでも呼称が違うもの

Twitterでは投稿することを「ツイート」といいますが、マストドンでは「トゥート」といい、「吠える」の意味だそうです。

トゥートって言いづらいですし、「吠える」ってなんだか荒々しいイメージですね。

またTwitterでの「リツイート」機能は、マストドンは「ブースト」といいます。
こっちはなんだか響きが格好良くていいですね。

インスタンス(サーバー)を選択する

前述で触れたとおり、TwitterやFacebookのように1つの企業だけが提供するのではなく様々な個人・企業が自前のサーバーに展開していくサービスになっています。

それらマストドンが展開されるサーバーを「インスタンス」と呼びます。
ユーザーはマストドンを始める際はどのインスタンスで始めるか選ぶところから始まります。

ただ、個人でインスタンスを立ち上げることもできるので、悪意ある人間がメールアドレスとパスワードを集めるためだけにインスタンスを立ち上げることも考えられます。

個人での運営をしているインスタンスに登録する際は捨てアドを使ったりパスワードもいつもと同じものを使用しないなど個人個人での対策も必要になるのではないでしょうか。

また利用しているサーバーに関しても貧弱なところだとアクセスが集中したときにすぐ落ちたりつながりにくくなる可能性もあります。

インスタンスには漫画やイラスト、映画、モノづくりなど特定の話題に特化したものがあり、日本でユーザー数の多い有名なところでは下記が挙げられます。

  • mstdn.jp
    管理者は「nullkal」さんという大学院生の方が、元々個人でされていたのですが、最近ドワンゴに入社されたそうで、運用は引き続き個人でされるのかドワンゴに移るのか良く知らないです。
  • pawoo.net
    イラストコミュニケーションサービスで有名なpixivが運営するインスタンス。pixivのアカウントとの連携なども可能。当然イラストなどに関する投稿が多いです。
  • friends.nico
    ニコニコ動画で有名なドワンゴが運営するインスタンス。
    こちらもニコニコ動画のアカウントとの連携が可能なようです。また「お気に入り」の部分が「ニコる」になっているなど細かいカスタマイズもある模様。(ニコるて何?)

他にもジャンルごとの沢山のインスタンスが日々増え続けているのでぜひ自分の趣味趣向にあったインスタンスを探してみてください。

「マストドン インスタンス」などで検索するとまとめてくれているサイトが沢山でてきます。

インスタンス間でのやりとり

マストドンのアカウントはインスタンス毎になるので、Aというインスタンスで作成したアカウントでBというインスタンスでログインすることはできません。

「じゃあ異なるインスタンスのユーザーと交流する際はいちいちそのインスタンスのアカウントを新しく作らないといけないの?」

その答えはNOです。

例えば同じインスタンス内であればリプライをする場合「@ユーザー名」だけでやり取りできますが、異なるインスタンスの場合は「@ユーザー名@インスタンス名」とすることでやり取りが可能となります。

この「ユーザー名+インスタンス名」の表記は「フルハンドル」と呼ばれるそうです。

実際にマストドンを使ってみよう

それでは実際にマストドンを使ってみましょう。

まずはインスタンスを決めるところからですが、今回は「mstdn.jp」にしてみます。
早速mstdn.jpにアクセスしましょう。

アクセスするとまずアカウント情報を登録する画面になるので、「ユーザー名」「メールアドレス」「パスワード」を入力しましょう。

入力できたら「参加する」ボタンをクリックしてユーザー登録完了です。

この際、すでに使われているアカウント名やメールアドレスであればエラー画面に映りますので、戻って別のアカウント名やメールアドレスで再登録しましょう。

無事登録が完了すると登録したメールアドレス宛に確認メールが届くので、メールの本文内のリンクから本登録しましょう。(全文英語のメールなので届かない人は迷惑メールに振り分けられていないかチェックしましょう)

ログインが完了したらホーム画面が表示されます。
いよいよマストドンデビューの始まりです。

マストドンは4つのカラムから構成されています。(このへんはインスタンスによって異なるかも?)

まず一番左端にあるのが、タイムラインやユーザー設定に関するメニューであったりトゥートするためのカラムになります。

トゥート

トゥートに使用できる機能ですが、顔文字の挿入、画像の添付、公開範囲の設定、CW(コンテンツワーニング…本文を読ませる前の忠告文)があります。

まず顔文字に関してですが、これはおそらくTwitterと同じ種類の顔文字でしょうか・・・?Twitterで顔文字を使うことがないのでわからないですが、とにかく種類と数は十分なようです。

次に画像の添付ですが、これには「NSFW」と呼ばれる機能がついており、「Not safe for work(職場閲覧注意)」の略らしいです。

どういう機能なのかは名前からだいたい察することができると思いますが、アダルトな内容だったり深夜の飯テロだったり、画像を表示する際にワンステップ挟むようになります。


↓実際の表示はこのような感じになります。

最後に「CW(コンテンツワーニング)」ですが、こちらも先ほどのNSFWと似たようなものですが、画像ではなく投稿テキストに対して全文表示する前に確認させることができます。

映画に関するネタバレ発言とかに使えそうですね。

CWを有効にすることで入力欄が上下で別れるので、上の入力欄に「閲覧注意!」などの確認メッセージを入力し、下の欄に本文を入力します。

実際の投稿画面ではこうなります。

ユーザー設定

上部メニューの右から2番目の歯車アイコンからユーザー設定を行えるので、始める前に表示名の変更やアイコン・背景画像の設定、通知設定などを行うといいでしょう。

ホームタイムライン

次に左から2番目のカラムですが、「ホームタイムライン」と呼ばれ、自分の投稿と自分がフォローしている人の投稿が表示されるタイムラインになります。

この記事を書いている時点で何も投稿していないし誰もフォローしていなかったので何も表示されていませんが、説明書きがあるようにまずは「連合タイムライン(後述にて説明)」や検索機能を使って他のユーザーをフォローしましょう。

通知

左から3番目のカラムは「通知」カラムとなっており、フォローされたときやブースト(リツイート)されたときにここに通知がでるそうです。

タイムライン・その他

最後に右端のカラムですが、ここに「ローカルタイムライン」や「連合タイムライン」を表示させることができるほか、「お気に入り」した投稿や「ブロック」または「ミュート」したユーザーの確認などもここから行えます。

ローカルタイムライン

現在のインスタンス内の投稿が一覧で流れていきます。まずはここを見ながらフォロワーを増やしていくといいのではないでしょうか。

連合タイムライン

この「連合(連邦)タイムライン」には下記の投稿を合算したものを出力するようです。

  1. 現在のインスタンスにいるユーザーの投稿
  2. ①がフォローしている他のインスタンスユーザーの投稿
  3. ②がブースト(リツイート)したその他のユーザー

正確にはちょっと違うかもしれませんがざっくりいうとこんな感じらしいです。
要約すると現在のインスタンスの全ユーザーのホームタイムラインをまとめたものがここに流れるということですかね。

サーバー情報

「サーバー情報」を見ることで現在のインスタンスを管理している個人または企業の確認ができます。ここにはインスタンス毎のルールや連絡先が書いているので一度目を通しておくといいでしょう。

自前のインスタンスを立てたい

インスタンスを探すにあたって自分の希望するインスタンスが見つからない場合、自分でインスタンスを立てるという選択肢もあります。

冒頭に触れた通り、マストドンのインスタンスを立ち上げるにはサーバーと構築するための知識が必要となってきます。

普段からLinux系のOSを触られてる人なら数時間程度で構築できるので難しくないらしいのですが、自分のようにまったく知識がない人間にはかなりハードルが高いのは間違いないです。

気になる方は「マストドン インストール」や「マストドン 構築」などで検索してみると色々な人がやり方が書いてくれていますので、一度見てみるといいのではないでしょうか。

ちなみに、割と簡単にインストールする方法として「さくらのクラウド」がスタートアップスクリプトを利用する方法を紹介していますが・・・

う、うーん・・・?実際触ってみたら意外と簡単なんですかね・・・?

このままマストドンが流行しつづければそのうちWordpressみたいにどのレンタルサーバーでもワンクリックインストールみたいなのでてくるんでしょうか。

最後に

いかがでしたでしょうか?

まだまだ今後どうなるか分からないですが、流行り物が好きな人はとりあえず触っておいても良いのではないでしょうか?ビッグウェーブ(仮)ですしね!

ちなみに自分はTwitterすら満足に使えていないので今後も使い続けられる自信はないです。

Googleストリートビューでバーチャルツアーを作成しよう

$
0
0

どうも、梅雨はVR内でパッキンのお姉ちゃんとサマーなレッスンを送る予定が結局ひとりジメジメした部屋で過ごすムラタです。

今PSVRいくらで売れるんでしょうね。

さて、今回はThetaを使ったGoogleストリートビューへの投稿と写真連結(バーチャルツアー)の話です。

ストリートビューへの投稿に関しては以前の記事でも少し触れましたのでそちらもご覧ください。

全天球撮影を始めよう

写真の連結について

以前はただ一枚の360°写真をアップするだけで、ストリートビューのような写真同士を連結して行き来するような処理を行なえるのは、Googleから認定を受けている代理店のみで一般のユーザーには行うことは出来ませんでした。

しかし2016年12月よりGoogleストリートビューアプリの機能によって代理店でなくても360°写真を撮れる人であれば誰でも自分のアップした360°写真の連結を行なうことが可能になりました。

アプリでの写真の繋ぎ込みには位置情報を読み取り自動で繋ぎ込みをしてくる「360°写真の自動連結」機能がありますが、こちらの機能は精度がまだ甘いようなので今回は手動での設定になります。

念のため自動連結の機能を切っておくには、アプリの画面上部にある検索窓の隣にある横三本線をタップしてメニューを表示します。

メニューの中から「設定」をタップし、その中から「360°写真を自動結合」をOFFにします。

 

実際に撮影してみよう

自動連結機能が切れたら早速撮影を始めましょう。

必要な機材

必要な機材はいつも通り「Theta」とそれを固定する「三脚」、あとGoogleストリートビューのアプリがインストールされたスマホだけです。

厳密には三脚は無くても撮影できますが、連結した際に遷移するたびに視線を下に落とすと撮影者が映るのはちょっとアレですよね・・・。

また店内などの屋内写真を撮る際に蛍光灯の光によって「フリッカー」と呼ばれる写真に帯状の横縞が映り込む現象が起こる可能性があります。

フリッカーを抑えるには「低感度」で「遅いシャッタースピード」で撮影する必要があるため、特に屋内を撮影を行なう場合は三脚はあった方が良いでしょう。

撮影

最初に撮影した場所が決まったらその場所でGoogleストリートビューアプリを開きます。その際にThetaの電源も入れてスマホとの連携も済ませておきましょう。

Thetaとの連携が出来ている状態であれば画面下に「RICHO THETAに接続されています」というメッセージが出ていると思います。

その状態で画面右下のカメラアイコンをタップすると画面がThetaによるカメラモードに切り替わります。

ここでは普段ThetaのアプリでできるようなシャッタースピードやISO感度などの設定などはできず自動的にオート設定で撮影されます(恐らくですが)。

ただHDRモードでの撮影だけは設定可能なので、三脚がある人はHDRモードで撮影してもいいでしょう。

撮影ポイントの間隔

一つ目の撮影が終わったらそこから繋げるための場所に移動して撮影します。

撮影のポイントとポイントの間隔は屋外であれば3m間隔(約5歩)、屋内では1m間隔(約2歩)とするのを推奨しています。(自動結合機能をONにしている場合、この感覚で撮影すると自動で結合されるようです)

ただそこまで厳密ではないようなので、極端に感覚が狭かったり遠かったりしなければ特に問題はないと思います。

あとは繋げたい数だけ撮影を繰り返します。

編集と結合

撮影が終わったら編集と結合作業に入ります。

編集作業というのは人の顔が映っていたり車のナンバープレートなどが映り込んでいる場合ぼかしを入れる必要があるため、その作業になります。

撮影した写真はアプリ上部のタブメニューの「非公開」タブに格納されています。

ぼかしを入れたい写真をタップすると実際の視点を動かせる360°ビューの画面に遷移します。

ぼかしをいれる

人物の顔にぼかしを入れたい場合、手動で入れる方法と自動で顔を認識してぼかしを入れる方法があります。

ぼかしを入れる箇所が人物だけである場合は自動で、顔認識が上手くいかない場合や、顔以外の車のナンバープレートやその他ぼかしを入れる必要がある部分については手動を使うという使い分けをすると良いでしょう。

自動でぼかしを入れる場合

顔認識機能を使って自動でぼかしを入れる場合、まず画面右上のメニューボタンをタップします。

展開されるメニューの中に「顔を検出してぼかしを適用」という項目があるので、それをタップします。

するとしばらく検出する時間があった後、顔と思われる箇所が半透明な四角いボックスですべて囲まれます。

この状態ではまだ選択範囲をしただけでぼかしは入っていないので、再度右上のメニューをタップします。

新しく「ぼかしを入れる」という項目が追加されているので、それをタップすることで先ほどの選択範囲全てにぼかしが入ります。

間違えた箇所にぼかしを入れてしまった場合は先ほどのメニューから「ぼかしを削除」をタップすればすべてのぼかしが削除されます。

手動でぼかしを入れる場合

手動でぼかしを入れる場合は、入れたい箇所を長めにタップし続けることで、その場所に先ほどの半透明の四角いボックスが挿入され、画面下に「ぼかしを入れますか?」というメッセージがでるので、それをタップすることでぼかしが入ります。

マップのリスティングを選択する

ぼかしの処理が終わったら次に「マップのリスティング」を設定します。

マップのリスティングとは撮影した場所の具体的な店名や施設名などを選択することです。(違ったらすみません)

先ほどと同じく画面右上のメニューボタンから「マップのリスティング」を選択します。

すると撮影した場所の付近の施設・会社・お店の名前が一覧で表示されますので、その中から合致するものを選択して下さい。

一覧の中に合致するものが表示されていない場合は、画面上部の「ストリートビューを検索」をタップして該当する場所の名前を入力して検索してください。

ただし恐らく最近できたなどのGoogleMapにまだ登録されていないような場所に関しては検索しても表示されないかと思います。

ここまで作業が完了したら繋ぎ込みの前に公開する必要があるので、画面下の「Googleマップに公開します」というテキストをタップします。(アプリの設定によってはwifi環境でないと公開できません)

写真の連結

無事公開が済んだらいよいよ写真を連結していきます。

公開済の写真はアプリ内の「プロフィール」タブに格納されており、先ほど設定したマップのリスティングごとにまとめられています。

連結したい場所のリスティングをタップすると、その場所の地図と中の写真が一覧で表示されるので「選択」をタップして、連結したい写真すべてをタップして選択状態にします。

選択状態から右側の「…」よりメニューを展開します。
その中に「写真を移動して結合」という項目があるのでそれをタップします。

すると結合編集画面に遷移します。
結合編集画面では選択した写真それぞれに番号が割り振られています。

番号をタップすることでその写真の位置、どの写真へ遷移可能か、方角が正しいかどうか、の設定が可能になります。

位置決めはPCのドラッグアンドドロップの要領で番号をタップしたまま任意の場所にスライドさせて放します。

この際地図の拡大率が小さいと他の番号を誤タップしたり、細かい位置調整が難しく非常に動かしずらいので(特に屋内の場合は間隔が狭いので)地図上をピンチアウトしてかなり拡大率を上げておくと作業しやすいです。

また、番号と番号の間にグレーのラインで繋がっているのが分かるかと思います。
これが遷移先を決めるラインになり、濃いグレーとなっているのが現在設定されている遷移先になります。

淡いグレーをタップすることで濃いグレーとなり、その先の写真へ遷移出来るようになるということです。

最後に方角ですが、選択している番号から赤い扇状のものが表示されているのが分かると思います。

これはこの写真が現在向いている向きを表していて、画面下部分に実際の向いてる場面が表示されています。

扇状の向いている方向と実際の向きが異なる場合は画面下のベルト状部分をスライドして正しい向きに合わせることができます。

全ての写真の設定が終わったら画面右上のチェックマークをタップして確定させます。

確定できたら実際に遷移ができるか確かめてみましょう。

先ほどのリスティング内の写真一覧からどれでもいいので写真をタップすると実際の360°ビューの画面に遷移するので、自分が先ほど設定した遷移先へ矢印が表示されているか確認してみてください。

正しく設定ができていれば下記のように遷移先の矢印が表示されていると思います。

矢印がずれていたり違う遷移先になっていた場合は、再度全ての写真を選択して「写真を移動して結合」より修正を行なってください。

以上でGoogleストリートビューによる写真の結合は完了となります。

PC版での表示について

Googleストリートビューのアプリ内に関しては割と早く反映されるのですが、PC版のストリートビューに関してはアプリ版で投稿してから反映されるまで多少タイムラグがあるようです。

例えば遷移の矢印が途中で切れていたり、意図しない遷移先が表示されたりしますが、概ね1日もあれば正常に反映されると思います。

ちなみにPC版では、Googleマップやサイト検索時の下記の部分から確認することができます。

Googleマップ検索時

写真情報の一番左にGoogle以外の第三者が投稿した360°写真が掲載されます。その隣にはGoogleが撮影した近所のストリートビューがあれば表示されます。

サイト検索時

サイト検索時の右側に表示されるビジネス情報の中に「写真を表示」という項目があるので、その中の「360°ビュー」タブにまとめられています。(これには恐らく事前にGoogleマイビジネスに登録しておく必要があると思います)

ちなみに以前はビジネス情報の中に「中を見る」という項目で直接屋内のストリートビューへ遷移することができました。

今でもいくつかのサイトでもその構成になっていますが、現在その構成は廃止されているようで、今後追加される360°写真に関しては全て「写真を表示」からのみの閲覧となるようです。(Google認定代理店による撮影なら出る?)

「中を見る」の方が分かりやすいしクリックされやすいとは思うんですけどね・・・残念です。今後の改修に期待しましょう。

最後に

今回の360°写真の連結いかがでしたでしょうか。

お店や施設の内観を実際に見渡せ、ある程度動き回れるというのは初めてそこに訪れるお客様にとって安心感を与えますし、それによって来店への敷居も下がるのではないでしょうか。

実際Googleもバーチャルツアーがユーザーに与える硬化を調査した結果、ビジネス情報に写真とバーチャルツアーが入っているとユーザーの関心が2倍になったという結果がでています。

それほどバーチャルツアーないし内観を見ることができる360°写真へのユーザーの関心は強いということですね。

となると前述した「中を見る」リンクがビジネス情報に表示されない仕様変更は本当に惜しいです・・・。

ちなみに今回は自身でのバーチャルツアーの作成を紹介しましたが、もし本気でバーチャルツアーに力をいれたいもしくは店内が広くて自分でするには面倒くさすぎるという方は「Googleストリートビュー認定代理店」に依頼すると良いかもしれません。

「認定代理店」というのはその名の通りGoogleから正式に認定を受けて代理でバーチャルツアーの撮影を請け負っているお店です。

撮影機材や技術も保証されているので、まずクオリティに関しては間違いないかと思います。

ただ代理店にもよると思いますが、それなりの金額はするという声はよく聞きますので依頼する前にその辺をしっかり確認しておく必要がありますね。

VCCWを導入してWordPress開発環境を構築しよう

$
0
0

発売から約1ヶ月してようやくドラクエ11も落ち着いてきたムラタです。
年のせいなのか分からないですけどエンディング見ちゃったらもう完全に心折れちゃってやりこみとかまったくする気起きないですね。

さて今回はローカルでの開発環境のお話です。

会社に入ったばかりのころは特に開発環境と呼ばれるものもなく、必要ともしていなかったのですが、Wordpressを触り始めた頃からxamppを扱うようになり、それ以来ずっとxamppで作業してきました。

正直今更開発環境変えるのもしんどいし、別段今でもxampp使ってて不便だと思ったことはそんな無いんですけど、新しいものを取り入れずにずっと停滞してるのも良くないし、最近は昔に比べてwordpressを使用する案件の率が非常に多いので、もっとwordpressに特化した開発環境に変えてみようと思ったのが発端です。

そこで今回はGoogle先生で『wordpress 開発環境』とかで調べると割とヒットする「VCCW」を今更ながら使ってみようと思います。

目次

VCCWって?

Vagrant」という仮想環境を構築・管理するツールをベースにしたWordpress開発環境構築ツールのことらしいです。

VagrantとChef(サーバー管理ツール)で仮想環境上にWordpress(PHPやMySQL、Apacheなどを含む)をまとめてインストールしてくれます。

その他にもWordpressの構築に役立つ様々な機能が含まれていて、Wordpressに関する操作をコマンドラインから実行できたり、ローカル環境と本番環境のデータ同期を簡単に実行することができます。

ちなみにVCCWとは

V…Vagrant
C…Chef
C…CentOS
W…Wordpress

の頭文字を取ったものらしいです。

VCCWを使用するには「Vagrant」の他に「VirtualBox」と呼ばれる仮想化ソフトウェアもインストールする必要があります。

VirtualBoxを使うことで例えば現在使用しているOS(例えばWindows)の中でゲストOSとして別のOS(例えばLinux)を実行することができるわけですね。

VCCWを使う前に

VirtualBoxのインストール

それではまずVirtualBoxからインストールしましょう。

まず下記URLから自分のOSにあったインストーラーをDLします。

【2017/11/6 追記】
※2017年11月現在、この後インストールする「Vagrant(ver1.9.7)」が現時点での最新Ver(5.2)に対応していないためVerは必ず5.1.xとします。

DLが完了したら展開し画面に従いインストールします。特に難しいところは無いはずです。

Vagrantのインストール

次にVagrantをインストールします。

こちらも同じく下記URLより適したものを選択してDLし、画面に従いインストールします。

インストールが完了したらコマンドプロンプトを立ち上げ「vagrant -v」と打ち込み、バージョンが表示されたら正常にインストールがされています。

vagrant -v

プラグイン「vagrant-hostsupdater」のインストール

次に「vagrant-hostsupdater」というプラグインをインストールします。

これはvagrant起動時に自動でhostsファイルを設置し、切断時には同じくhostsから設定を削除してくれるものらしいです。

要するに事あるごとにhostsファイルを自身で触る必要がなくなるってことですね。

引き続きコマンドプロンプトから「vagrant plugin install vagrant-hostsupdater」とコマンドしインストールします。

vagrant plugin install vagrant-hostsupdater

現在インストールされているvagrantのプラグインを確認するには「vagrant plugin list」をコマンドします。

vagrant plugin list

これで現在インストール済のプラグインの名前がリスト表示されます。

Boxのインストール

これに関しては詳しく説明しているサイトが見つけられなかったので自分も全然理解していないのですが、仮想マシンを作成する際に必要なもので仮想マシンのテンプレートみたいなものらしいです。次回から省略可?

インストールするには「vagrant box add [box-name] [box-url]」とするそうですが。自分は参考サイトに従って下記のように指定しました。(名前だけでもいいんでしょうか)

vagrant box add miya0001/vccw

これでインストールが始まるのですが、これが結構長いので注意です。自分は10分以上はかかりました。

ちなみに最初この処理をしていませんでしたが別に普通に動いていたので指定がないならないで良いのかも・・・(自動的にcentosがインストールされる?)

VCCWのダウンロード

いよいよVCCWをダウンロードしてくるわけですが。
方法としてgitでcloneしてくる方法とサイトからzipアーカイブをDLしてくる2つの方法があります。

参考にしたサイトのほとんどでgitによるcloneする方法を書いているのですが、VCCW開発者のブログ記事にはzipによるDLを強く推奨されているので自分はそちらの方法にしました。推奨理由については下記参照。

windowsだとcloneすると改行コードがよろしくないことになるのが多いようです。

サイトからzipアーカイブをDLする場合はこちら

DLできたら解凍して展開したファイルを任意のプロジェクトフォルダにコピペします。
今回は仮に「D:\works\htdocs\project」とします。

コピペしたら「provision」というディレクトリがあると思うのでその中の「default.yml」ファイルを一つ上の階層にコピペし、名前を「site.yml」に変更します。

このsite.ymlには様々設定が記述されており、ホスト名やIPアドレス、Wordpressのインストール時のサイト名に言語設定、管理者権限、初期テーマ、PHPの設定など多岐にわたります。

とりあえず変更しておく必要がありそうなのは「hostname」と「ip」、あとは「lang」でしょうか。

ちなみに後からでも変更可能です。

今回はhostnameを「project.dev
IPを「192.168.33.10」としました。

この二つがブラウザでアクセスする際に必要な情報になります。

#
# Network Settings
#
hostname: project.dev #任意の名前を付けてください
ip: 192.168.33.10 #既に使用しているipと被らないようにしてください

#
# WordPress Settings
#
lang: ja #「ja」としてください

site.ymlの編集が済んだらコマンドプロンプトを立ち上げ、上記プロジェクトの場所まで移動します。

cd /d D:\works\htdocs\project

もしくは該当ディレクトリをshiftキーを押しながら右クリックで「コマンドウインドウをここで開く」というメニューがでるので、それでも該当の箇所に簡単に移動できます。

移動できたらvagrantコマンドの起動を意味する「vagrant up」とコマンドし、起動させます。

vagrant up

こちらも初回は色々インストールするため結構な時間がかかるので気長に待ちましょう。

2回目以降の起動はそこまで遅くはないので安心してください。

「vagrant up」以外のvagrantコマンドは色々ありますがよく使うのは

  • vagrant reload…再起動
  • vagrant status…状態の確認(起動中か停止中か)
  • vagrant halt…停止させる
  • vagrant up…起動させる
  • vagrant init…初期化する
  • vagrant destroy…現在のインスタンスを削除する

これらでしょうか。「halt」と「up」くらいは覚えておきましょう。

ちなみにこの起動に関して環境によって色々なパターンでうまくいかないことが多いようです。自分の場合はプラグインのhosts-updaterによるhostsへの書き込みの段階でパーミッションエラーとなっていました。

なのでこの場合、コマンドプロンプトを管理者権限で実行することで解決しました。(プラグインを使わずに手動でhostsにホスト名とIPを書き込んでも可)

こんな感じで起動中はhostsに書き込まれて、停止すると削除されます。

初回の起動が完了したら「wordpress」というフォルダが生成され、その中にWordpress関連のファイルがインストールされています。

この「wordpress」ディレクトリが構築した仮想環境のドキュメントルート「/var/www/html」と同期してるそうです。

同期させるフォルダの名前もsite.ymlに指定があるので別のが良い人はそこで変えれます。自分は「htdocs」としました。

仮想完了に構築されたWPを確認する

これで仮想環境でWPが確認できるはずなので早速先ほどのsite.ymlで設定したホスト名かIPアドレスでアクセスしてみましょう。

今回だと「http://project.dev」か「http://192.168.33.10」になります。

はい、無事に表示されました。

管理画面はsite.ymlで変更していなければユーザー・パスともに「admin」でログインできるはずです。入れなければsite.ymlを開いて確認しましょう。

これでとりあずVCCWでWordpressを表示するというスタートは切れましたね。

※Microsoft Edgeの場合、そのままでは仮想環境上のサイトにはアクセスできないようで、「このページは表示できません」と表示されます。

自分はもう諦めましたが、解決されたい場合は下記のURLが参考になるかと思います。

phpMyAdminを仮想環境にインストールする

これは別に必須ではないですが、自分はちょっとDBの中を触りたいときでもphpMyAdminのようなGUIがないと触りきらない人間なので入れてます。

デフォルトでは入っていないのでまずphpMyAdminのサイトからzipでダウンロードしてきます。

サイトの右上にある緑のボタンからzipをダウンロードし解凍します。(ファイル数が多く割と時間がかかります)

解凍できたらフォルダ名を「phpmyadmin」と変更して、site.ymlでsynced_folderに指定しているフォルダー内に移動します。今回なら「htdocs」になります。

次にコマンドプロンプトで該当のディレクトリまで移動したら、「vagrant up」で起動させます。既に起動済なら不要です。

起動したら「vagrant ssh」で現在の仮想環境にSSHでログインします。

ログインしたらブラウザを開いて、site.ymlで設定したホスト名もしくはIPアドレスの後に「phpmyadmin」としphpmyadminにアクセスします。

今回なら「http://project.dev/phpmyadmin/」か「http://192.168.33.10/phpmyadmin/」になります。

無事ログイン画面が開きました。

ユーザー名とパスワードは初期設定では両方とも「wordpress」になっているはずです。

分からなければsite.ymlのデータベースの部分を確認しましょう。

これでphpmyadminのインストールは完了です。

wordmoveを使って本番環境と同期させる

vccwにはwordmoveと呼ばれる本番環境とローカル環境のデータを同期させるツールがあり、テーマファイルやプラグインだけでなくDBの同期もコマンドひとつで行ってくれます。

ただDBに関してはそのまま同期しちゃうとローカルと本番でパスが異なるので同期する前にその辺の調整が必要みたいですね。

パスの書き換えはwordmoveが自動で書き換えてくれるみたいな記事をよく見るのでそうなのだとばかり思ってたのですが・・・このへんはもう少し調べる必要がありそうです。

rubyのインストール

wordmoveはruby製なのでPCにrubyがインストールされていないと動かすことができません。

MacにはデフォルトでインストールされているようですがWindowsには入っていないのでインストールしましょう。

コマンドプロンプトを管理者権限で起動させ、まずrubyがインストールされていないか確認します。「ruby -v」とコマンドします。

ruby -v

既にインストール済ならバージョン情報が表示されるはずです。
エラーが表示された場合は次に進みます。

rubyのサイトより必要なVerのインストーラーをダウンロードします。
今回は「Ruby2.4.1-2(x64)」としました。

ダウンロードが完了したらインストーラーを実行するだけです。
終わったらもう一度「ruby -v」でバージョンが表示されるか確認しておきます。

Movefileの設定

rubyのインストールが完了したら「vagrant up」したディレクトリ内に「Movefile」というファイルがあると思いますので、それをエディターで開きます。

このMovefileには本番環境と同期させるために必要なデータベース情報やsshの設定などを行なえます。

まず最初に「local(テスト環境)」の設定を行ないます。

local:
  vhost: "http://project.dev"
  wordpress_path: "/var/www/html" # use an absolute path here

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"
    charset: "utf8"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   mu_plugins: "wp-content/mu-plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"

「vhost」はsite.ymlで設定したhostnameを入れておきます。
今回なら「project.dev」ですね。

「wordpress_path」は仮想環境のwordpressがインストールされている場所のフルパスを記述します。特に変更してなければそのままで大丈夫です。

「database」に関してもwordpressに使用したデータベース情報を変更していなければデフォルトのままで大丈夫です。
※DBの同期も行いたい場合は「site.yml」の「db_prefix」だけは本番と合わせておかないと同期されないので注意。ただし、前述の通りsite_urlなどのパスも上書きされてしまうので使用する場合はその辺の考慮が必要です。

デフォルトではコメントアウトされていますが、他にもwp-contentやuploadsなど特定のディレクトリの場所や名前を変えている場合、その場所を定義する設定などもあります。

次にproduction(本番環境)の設定をしていきます。

production:
  vhost: "http://xxxxx.jp/"
  wordpress_path: "/home/users/xxxxxxxxxxxx" # use an absolute path here

  database:
    name: "database-name"
    user: "database-user"
    password: "database-pass"
    host: "xxxxxxx"
    port: "3308" # Use just in case you have exotic server config
    mysqldump_options: "--max_allowed_packet=50MB" # Only available if using SSH

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "phpmyadmin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  ssh:
    host: "xxxxx.jp"
    user: "xxxxxxx"
    password: "xxxxxxxxxxxx"
    port: 2222
    rsync_options: --verbose

「vhost」は本番のURLを入力して、「wordpres_path」にはローカルと同じくwordpressまでのフルパスを入力します。

「database」にも本番環境で使用しているデータベースの情報を入力します。

「exclude」には同期させないファイルやディレクトリを指定します。

前述のphpmyadminなど本番にアップする必要がないものは漏れがないようしっかり指定しておきましょう。

最後に「ssh」の設定を行ないます。

使用しているレンタルサーバーによってはsshが使用できない場合もあるので注意です。

sshが使用できない、もしくはsshは使用できるが同期をする「rsync」が動かない場合はFTPによる同期もできるそうですが、今後FTPによる同期は廃止される予定だそうです。

FTPの場合は「ssh」の部分を下記のように書き換える必要があります。

ftp:
    host: "xxxx"
    user: "xxxx"
    password: "xxxxxxxx"
    passive: true

これでwordmoveを使う準備が整いました。
早速使ってみましょう。

wordmoveを使用するにはまず現在のインスタンスにsshでログインする必要があります。

コマンドプロンプトでいつも通り該当ディレクトリまで移動したのち、下記のコマンドで仮想環境にsshでログインします。

vagrant ssh

ログインが成功したら

vagrant@xxxx:~$

という表記になっているはずです。

ログインした時は仮想環境の「/home/vagrant」にいるのですが、ここからMovefileがあるディレクトリまで移動する必要があります。

Movefileがあるディレクトリは「/vagrant」になりますので

cd /vagrant

とすると今度は表示が

vagrant@xxxx:/vagrant$

こうなります。
ここでようやくwordmoveは使えるわけです。

wordmoveは基本的にローカル環境から本番環境へ同期(push)か逆の本番からローカルへの同期(pull)になります。

pullとpushを間違えると場合によってはえらいことになるので気を付けましょう。

また同期といっても必ず全部同期させるというわけではなく、オプションを指定することで何を同期させるかの指定も可能です。

  • wordmove pull(push) -all … 全て同期
  • wordmove pull(push) -w … Wordpressソースファイルのみ
  • wordmove pull(push) -t … テーマファイルのみ(themeディレクトリ)
  • wordmove pull(push) -d … データベースのみ
  • wordmove pull(push) -p … プラグインのみ
  • wordmove pull(push) -u … uploads内全て

例えば下記のコマンドだとローカル環境のテーマとデータベース、プラグインを本番環境に同期させることになります。

wordmove push -t -d -p

これで毎回FTPでディレクトリ移動したりファイルを探したりする手間がなくなり、コマンド一発でアップすることができます。

当然そのぶん以前以上に慎重に行わないといけませんし、gitによるバージョン管理も必須と考えていいでしょう。

本当ならいきなりローカルから本番環境ではなくて、その前にステージング環境を用意してそこで確認が取れたら本番という流れが良いんでしょうね。

実際にwordmoveで同期させてみる

ここからは実際にlolipopサーバーを例にwordmoveを動かしてみようと思います。
本番環境は以下の通りです。

WordPressは構築済でルートディレクトリに設定しています。

使用サーバー ロリポップ(スタンダードプラン)
サイトアドレス http://ossan.chicappa.jp/
SSH

Movefileの編集

まずMovefileの設定から始めますが、localの設定については先ほどと一緒なので割愛して「production」の設定を見ていきましょう。

「vhost」はサイトアドレスの「http://ossan.chicappa.jp/」とします

「wordpress_path」はフルパスが必要になります。ロリポップでは「アカウント情報」の「フルパス」から確認することができます。

「database」は「サーバーの管理・設定」の「データベース」から確認できます。
パスワードに関しては「操作する」ボタンを選択した先で確認しましょう。

「database」の設定の中に「port」がありますが、lolipopでは使わないので頭に「#」をつけてコメントアウトするか消してしまいましょう。

自分はこのせいでdbの同期だけずっとひっかかってました。(そもそも注釈に限定的な使用っぽいことは書いてあるんですけどね・・・)

これでdatabaseはOKです、次に「exclude」は今回はそのままで大丈夫なので肝心の「ssh」の設定に移ります。

まずlolipopではデフォルトではsshは無効の設定になっているので有効にします。
「サーバーの管理・設定」の「SSH」を選択します。

「SSHは設定されていません」という表記になっていると思うのでその下の「SSHを有効にする」ボタンを選択します。

これでSSHが有効になり、サーバーやパスワードなどの情報が表示されます。

以上でMovefileに必要な情報が全て揃いました。

ローカル環境のテーマファイルを本番環境にpushする

では最初にローカル環境で編集したテーマファイルを本番環境にpushしてみます。
編集した箇所は「sidebar.php」の下記部分になります。

コマンドプロンプトで「project」まで移動します。

cd /d D:\works\htdocs\project

そしてVagrantを起動。

vagrant up

起動したらSSHでログインします。

vagrant ssh

ログインしたら仮想環境内のMovefileがある場所まで移動。

cd /vagrant

wordmoveコマンドで本番環境へpushします。今回はテーマだけpushできればいいので「-t(theme)」とします。

wordmove push -t

ちゃんとSSHの設定が通っていれば、下記のような記述が出て本番環境へテーマがpushされるはずです。

本番環境のテーマを覗いて無事反映されているか確認します。

はい、ちゃんと本番環境のテーマにローカルのテーマが反映されていますね。
以上で本番環境へのpushは完了です。

最後に

xamppからvccwへ変更してみたものの、実はまだ本格的に案件で使用していないので、本当に使いやすいか、便利なのかは全然分からない状況です。

今はまだ使い慣れたxamppの方が手っ取り早いなという印象なのですが、使いこなせるようになったらかなり作業効率も上がるんじゃないかなと期待しています。

まだPHPのバージョンの変更方法やWordmoveでDBのパスが上書きされる件など、調べる必要があることが沢山あるので、面倒くさくてもなるべくVCCWを使うようにしてその辺も解決していきたいですね。

それではまた次回。

Local by Flywheelを導入してWordPress開発環境を構築しよう

$
0
0

どうもムラタです。
早いもので今年も残りあと僅かですが、今年はまったくバイクでツーリングに行ってないので寒さが本格的になる前にどこか行きたいですね。まあ十中八区どこも行かないですが。

さて、今回は前回の「VCCWを導入してWordPress開発環境を構築しよう」に引き続き、ローカルでのWordpress構築環境のお話です。

前回のVCCWでは導入前になんやかんやインストールしたり、設定ファイルいじったり、起動させるのにコマンドプロンプト触ったりと、正直ちょっと敷居が高い感じがしたと思います。
実際自分も導入いたるまでかなり嫌悪感がありました。

そんなわけで今回はそんな難しいことは取っ払ってもっと楽にローカル環境を構築しようというわけです。

Local by Flywheelとは

今回使用するのが「Local by Flywheel」というツールで以下のような特徴があります。

  • 無料で使用できる。
  • GUIなので基本的に自分でコマンドを打つ必要は無い。
  • ローカルでSSL環境を実装できる。
  • 元々はMacのみ対応だったが最近Windowsも対応された。
  • 一時的にローカル環境を外部に公開できる。
  • PHPやWEBサーバーを構築後でも変更できる。
  • WP-CLIが使用できるので管理画面にログインせずにWPに関する様々な操作がコマンドラインで行える。

どうでしょう、無料でここまでの機能が使えれば申し分ないのではないでしょうか。

インストール

それでは早速インストールしてみましょう。
まずはLocal by Flywheelのサイトにアクセスします。

サイト右上の方に「Download」というボタンがあるのでそこをクリックします。

Mac版とWindows版のどちらかを選択するようになっているので任意のOSを選択します。今回はWindows版で説明します。

フォームに名前やメールアドレス、社名など入力する欄がありますが必須項目はメールアドレスと末尾の所有webサイト数だけなので、余計な情報を渡したくない人はその2つだけ入力して「GET IT NOW!」というボタンをクリックします。

送信後「自動的にDLが開始されます」的なポップアップが表示されてDLが開始されます。何も始まらない人は「click here」より手動でDLをしましょう。

DLしたexeファイルを実行するとインストールが開始されますが、場合によっては「WindowによってPCが保護されました」というメッセージが表示されてインストールが中断される場合もあります。

その場合無視して実行でいいのですが、画面に「実行しない」しかボタンが表示されていない場合、メッセージ終わりの「詳細情報」をクリックすると「実行」というボタンが表示されるのでそれでインストールを続行します。

しばらく待ってインストールが完了すると「Error Reporting」というポップアップが表示されますが、これは何かしらのエラーが起こった際にそのレポートを開発元に送信するかどうかの表示なので、開発に貢献したいのであれば「Turn on Error Reporting」を、何も送信したくないって人は「いいえ」ボタンを押してください。

次に「Welcome to Local by Flywheel」という画面が表示されていると思いますが、Local by Flywheelを使用するに当たって、必要なツールのインストールもしくはアップデートを行なう必要があるため、それをひとつひとつ設定していくよという訳です。

では「LET’S GO」というボタンをクリックしてそれぞれインストール進めます。

VirtualBoxはインストールする際に強制的に再起動させられるようなので(すくなくとも自分はそうでした)作業中のファイルなどがあれば事前に保存して終了しておきましょう。

再起動させられたらもう一度exeファイルを開くと続きから始まります。

VirtualBox以降も同じようにインストールを進めていきましょう。

ローカルサイトの作成

全てインストールが完了したらLocal by Flywheelが開き以下のような画面になっているかと思います。

なにはともあれまずはローカルサイトを作成してみましょう。
画面中央の「CREATE NEW SITE」ボタンをクリックします。

サイト概要の入力

最初にサイト名を入力する欄が表示されるので任意の名前を半角英数字で入力します。ここで入力した名前はサイト名にも使われますが、サイト名を日本語にしたい場合はWPのインストールが完了してから管理画面内で変更してください。

また名前入力欄の下にある「ADVANCED OPTIONS」をクリックするとローカルで確認する際のドメインやファイルの保存先、ブループリント(設計図として後程使いまわせるようにする?)などの設定ができます。

設定が終わったら「CONTINUE」ボタンをクリックして次に進みます。

環境の設定

次にPHPのバージョンやWEBサーバー、データベースの設定を行ないます。
「Preferred」と「Custom」がありますが、よく分からない場合はPreferredを選んでおけば問題ないです。PHPのバージョンやWEBサーバーの種類を本番環境と合わせておきたい場合はCustomよりそれぞれ選択可能です。

ただしCustom設定にした場合、正常な動作の保証はしていないようです。

Customで選択できるPHPのバージョンは(Local by Flywheel Ver2.1.1)7.1.4~5.2.4です。

WEBサーバーは「nginx」か「Apache」のどちらかを選択できます。Apache以外知りませんでした・・・

MySQLに関しては5.6と5.5のどちらかのみとなります。

設定が済んだらまた「CONTINUE」ボタンより次に進みます。

WordPressの設定

最後にWordpressの設定を行ないます。
管理者ユーザー名とパスワード、メールアドレスを入力するだけです。

こちらにも「ADVANCED OPTIONS」がありますが、マルチサイト化するかどうかの設定のみになります。

最後に「ADD SITE」ボタンをクリックすると設定した内容でローカルサイトの構築が始まります。
少し時間がかかるので気長に待ちましょう。

その際、途中に何度か「デバイスに変更を加えることを許可しますか?」というダイアログが表示されますが全て「はい」とします。

サイトの構築完了

構築が完了すると次のようなサイトの概要を表示した画面になります。

画面左側にある「Local Sites」に構築したローカルサイトが一覧として並びます。

仮想環境が起動しているローカルサイトは名前の左側に緑のがつきます。この状態のサイトは設定したサイトドメインにアクセスすることでサイトを閲覧することが可能になります。

画面右側には選択しているローカルサイトの概要が表示されます。
ここから管理画面やサイトTOPに飛ぶこともできます。

また途中でPHPのバージョンやWEBサーバーを変更したくなった場合もここから再度設定可能です。あまりないと思いますがサイトドメインも途中で変更可能です。

それでは早速「VIEW SITE」ボタンよりサイトを確認してみましょう。

問題なく表示されました。ドメインも設定した「project-name.local」になっています。

ディレクトリ構成

今回ローカルサイトのインストール先をDドライブの「local_by_flywheel/project_name」としましたが、実際のルートディレクトリは「local_by_flywheel/project_name/app/public」となります。

local by flywheelの機能

local by flywheelには様々な機能も付いています。

データベースの操作

まずデータベースの操作については「Adminer」というPHPベースのデータベース管理ツールが使えます。今までphpMyAdminしか使ってなかったので画面の簡素さにちょっと悲しく見えます・・・。

サイトのSSL化

SSLについて詳しくないですが、ローカルサイトを作成した時点で自己署名の証明書が発行されるそうで、これでなんちゃってSSL化ができるそうです。本番と限りなく近い環境にしたい人にはいいのでしょうか。

メール送受信の確認

昔xamppで構築していた時、メールの送受信を可能にしようとすると割と面倒くさいことになっていた記憶がありますが、Local by Flywheelでは「MailHog」というツールを使用することで簡単にローカルでのメール送受信の確認が行えます。

サイトの概要の「UTILITIES」より「OPEN MAILHOG」ボタンをクリックすることでMailHogの画面へ遷移します。

WordPressを構築した際のメールが届いているのが確認できます。

ローカルサイトの外部公開

ローカルで構築している内容をスマホの実機で確認したいときや他のスタッフのPCで確認してもらいたいときってありますよね。
xamppでも同じLAN内であれば色々設定すれば可能でしたがLocal by Flywheelではもっと手軽に外部の人にローカル環境を確認してもらうことが可能です。

サイト概要画面の下に「Live Link」という項目があるので、それの「ENABLE」ボタンをクリックします。

すると先ほどの箇所に「xxxxxxx.ngrok.io」のようなアドレスが表示されるので、その表示されたアドレスにアクセスするとローカルサイトが表示されるようになります。これでLAN外のスマホでもアクセスすることが可能です。

このように指定されたアドレスでスマホからアクセスできました。

注意点としてこのアドレスは一時的なものでしかなく、一度停止した後再度ENABLEとした場合、まったく別のアドレスが割り振られます。
クライアントなどに送る際はあくまで一時的なアドレスということを忘れずに伝えましょう。

SSH+WP-CLI

WPの様々な処理を管理画面に入らずコマンドラインから行なえる「WP-CLI」も標準で入っています。

WP-CLIを実行するにはまず構築した仮想環境にSSHでログインする必要があります。
Local by Flywheelの構築サイト一覧から任意のサイトを右クリックすると「Open Site SSH」というメニューがあるのでこれをクリックします。

すると黒いコンソール画面が表示されるので、まずは下記のコマンドを入力してWP-CLIがインストールされているか確認してみます。

wp cli version

これで下記のようにバージョン情報が表示されれば問題ありません。

試しにWP-CLIを使ってDBのバックアップを取ってみましょう。
バックアップを取るには下記の「db」コマンドを入力します。

wp db export app/public/wordpress_20171107.sql

 

これでインストール先のディレクトリに「wordpress_20171107.sql」というファイルが作成されているはずです。
今回の例でいえば
「local_by_flywheel/project_name/app/public」になります。

WP-CLIには他にもプラグイン名をまとめて指定して一気にインストールするなど色々便利なコマンドが使えますので、気になる人は調べてみてください。

おわり

いかがだったでしょうか。前回のVCCWに比べたらグッと敷居は下がったと思いませんか?

使い慣れたものから新しいツールに移行するのは誰でも億劫だと思いますが、使い始めたら便利だと思うので挑戦してみてはいかがでしょうか。

lolipopサーバーに「Magento」をインストールしてみる

$
0
0

どうも、今年はなるべく有休を消化するようにしたいムラタです。

突然ですが日本国内でECサイトのオープンソースCMSの「鉄板」といえばEC-CUBEですよね。(あくまで個人的な感想です)

でも日本以外の海外だと一体なにが「鉄板」となっているのでしょうか。

世界中の様々なweb上のデータを解析しているDatanyzeより「使用しているECサイトプラットフォーム」の統計によると「Magento(マジェント)」が18.98%のシェア率を誇り一番使われているようです。(2017年12月現在)

ちなみに2位は「IBM Websphere Commerce」で12.05%でした。
正直1位も2位も初めて聞きました。自分が無知なだけで割と有名なんでしょうか。

というわけで今回は堂々1位となった「Magento」とは何なのかを調べながら実際にインストールするところまでのお話です。

※あくまでインストールする話がメインなので機能面の話はほとんどありません。

Magentoとは

最初にMagentoってなに?というところからですが、
アメリカのロサンゼルスにあるMagento.Incが開発しているECサイトオープンソースCMSで、およそ世界中で25万以上のECサイトで利用されているそうです。

特長

Magentoはグローバル展開に強い特徴があり、多言語や多通貨・税管理機能がデフォルトで備わっているようです。いわゆる越境ECサイトの構築に適しているようです。

他にもクーポン機能や1つのMagentoで複数の異なるドメイン名のサイトを運用できるマルチサイト機能などもあるようです。

拡張性についても高いようで、EC-CUBEのプラグインと同じように「エクステンション」と呼ばれる拡張機能を追加すること可能です(ものによっては有償)。

世界中で高いシェア率を誇るだけあり、困った時に検索すると結構な数の記事がヒットするのも嬉しいですね。ただし、記事のほとんどが英語なので英語が苦手だと翻訳だけで結構な時間がかかってしまいます。

選べる3つのエディション

またMagentoには3つのエディションが用意されていて、サイトの規模に合わせて自由に選択することができます。

■Open Source

基本無料で使える一番基本的なエディションです。有償版に比べると使えない機能もありますが、前述のエクステンションがあるのでそれらを使うことで補うこともできそうです。小規模サイトであればこちらで十分でしょう。

■Commers

無償版の機能を拡張・強化した有償版です。複数台のデータベースサーバーを併用して不可の分散を行なえたり、任意のタイミングで自動的にコンテンツを差し替えることができるコンテンツステージング機能など他にも多種多様な機能が搭載されているようです。
また公式からのサポートも受けることができるのでもしもの時も安心です。

■Commers Cloud

上記Commers版の進化版といえる最上位エディション。その名の通りクラウドサービスを利用してAmazon Web Service(AWS)との組み合わせによるサービスになるようです。CDNによる負荷分散や表示の高速化、ファイルのバージョン管理、モニタリングサービスによるサーバーの負荷状況や読み込みに時間がかかっているページの解析なども行えるようです。

バージョン

Magentoは現在(2017年12月時点)Ver2となりますが、Ver1と2ではかなり変化があったようです。エクステンションについては完全に1と2は別物となっており、互換性はないようです。
この辺はEC-CUBEの2系と3系を彷彿とさせますね。

参照サイト

ここまでざっくりとMagentoについて書きましたが詳しい内容は「カゴヤのサーバー研究室」さんや、日本のMagentoパートナー企業の「ベリテワークス」さんのサイトに詳しく掲載されています。

インストールするバージョンとサーバーの決定

Magentoの事が分かってきたところで、実際にインストールをしていきたいと思います。
まずインストールMagentoのバージョンとその要件に合うサーバーを決めましょう。

今回インストールするMagentoのバージョン

今回インストールするバージョンは2017年12月時点での最新Verとなる「2.2.2」とします。

ちなみに2.2.2からAmazonの「ワンクリック購入」の特許が切れたことでMagentoでもその機能が実装されたようです。
というか特許あったんですねあの機能…初めて知りました。

ver2.2.2の動作要件

Magento2.2.xのバージョンでは以下の動作環境を推奨しています。

OS Linux (RHEL)、CentOS、Ubuntu、Debianなど
メモリ 2GB以上
Webサーバー Apache…2.2もしくは2.4
nginx…1.x
Composer 最新の安定版。
別にインストールされていなくてもいい模様
データベース MySQL…5.6、5.7
PHP 7.0.2
7.0.4
7.0.6-7.0.x
7.1.x

上記以外にも細かい要件はありますが、とりあえずこの辺をインストールする予定のサーバーがクリアしているかどうかをチェックしておくとしましょう。

要件の詳細はMagentoの下記のページで確認できます。

今回使用するサーバー

テストで構築するだけなのに新しくサーバーを借りるのもお金がかかるし嫌なので今回は個人的にテストサーバーとして契約しているロリポップ(スタンダードプラン)を使用します。

ロリポップのサーバーの仕様ページを見る限り「メモリ」に関しての表記がないのでそこだけ不明ですが、それ以外に関しては概ね大丈夫そうな感じですね。

インストール

Magentoのインストール方法

Magentoはインストールするにあたって下記の3つのパターンがあるようです。

  1. Magento公式サイトからzipアーカイブをDLしてFTP経由でインストール
  2. composerを使ってインストール
  3. githubからcloneしてインストール

1番が一番簡単そうではあるのですが、アップに滅茶苦茶時間がかかるという記事があったのと、zipアーカイブがどこのページにあるのか全くたどり着けなかったので今回は2番のcomposerを使ってインストールしようと思います。

※DLページは後日見つけました

composerのインストール

そもそも今まで業務で触ったこともなかった「composer」ってなに?って感じなんですが、ざっくりいうとPHPのパッケージを賢くインストールしてくれるツールみたいですね。分かったような分からないような…。

とにかくcomposerでインストールすることで下記の恩恵を受けられるようです。

  • 最新版のMagentoのソースと関連するライブラリをDLできる
  • サイト全体をcomposerが管理するようになる。アップデートが容易に?
  • FTPでアップしたりなんだの余計な手間がかからない

ただし、デメリットとしてcomposerがコマンドラインでの作業になるためそれに慣れていない人にはハードルが相当高いのと、使用するサーバーのメモリが小さいと実行できないなどもあるようです。

では実際にロリポップにcomposerのインストールをしていきましょう。

SSHの有効化とPHPのVerの確認

まずはSSHが有効である必要があるのでロリポップの管理画面からSSHが有効になっているか確認するのですが、ついでにPHPのバージョンも7.1になっているか確認しておきましょう。

管理画面メニューの「サーバーの管理・設定」より「PHP設定」を選択。
該当ドメインのバージョンが「7.1」になっているか確認します。なっていないようなら変更しておきます。

 

次にメニューの同じく「サーバーの管理・設定」より「SSH」を選択。
こちらも有効になっているかを確認し、なっていないなら有効に変更しておきます。
またSSHサーバーやアカウントパスワードなども控えておきましょう。

SSHでログイン

上記の情報を基にお好きなSSHクライアントでサーバーにログインします。

ログインが完了したら以下のコマンドでインストーラーをダウンロードします。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

何の反応もないですがファイルはコピーされているようです。
次に以下のコマンドを実行します。

php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

ハッシュの確認?をしているようです。
問題なければコンソール画面に「Installer verified」と表示されます。
逆に何か問題があれば「Installer corrupt」と表示されインストーラーは削除されます。

 

次のコマンドでインストーラーを実行します。

php composer-setup.php

ダウンロードが完了すると画面に

Composer (version 1.5.6) successfully installed to: /home/users/0/xxxxx/composer.phar

と表示されます。
インストールが完了したらインストーラーは不要なので削除しておきます。

php -r "unlink('composer-setup.php');"

これで削除完了です。

最後にバージョン確認コマンドをしてちゃんとインストールがされているか確認します。

php composer.phar -V

これでバージョン情報が表示されればcomposerのインストールは完了です。

composerを使ってMagentoファイルをダウンロード

ではいよいよMagentoのインストールに必要なファイル群をダウンロードしていきましょう。

Magentoアカウントの作成

composerを使ってダウンロードする場合、Magento公式サイトにてアカウントを登録する必要があるようなのでアカウントを作成しましょう。

Magentoのサイトが開いたら画面右上の「My Account」を選択します。

既にアカウントを持っている人用のログインフォームは左側に、新しくアカウントを作成する人用のリンクボタンが右側にあるので、右側の「Register」ボタンを選択します。

アカウント作成画面に遷移するので必須項目を全て入力して送信します。

送信が完了すると登録したメールアドレス宛に確認メールが届くので本文内の「Verify your email」リンクを選択し、認証完了させます。

登録完了後マイページにアクセスし、タブメニューより「Marketplace」を選択します。

画面遷移後、「My products」より「Access Key」を選択します。

Create a New Access Key」ボタンを選択します。

すると「Create new access keys」という名前を入力するポップアップが表示されるので適当な名前を入力して「OK」を選択します。

前述の名前で公開鍵秘密鍵が生成されるので2つともコピーしておきます。

Magentoファイルのダウンロード

SSHクライアントに戻り、次のコマンドをします。

php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition <インストールしたいディレクトリ>

今回インストールする場所をルートディレクトリに「magento」というディレクトリを切ってMagentoのTOPページURLを「http://xxxx.com/magento/」としたかったので上記コマンドの「<インストールしたいディレクトリ>」部分を
web/magento」としました。

実行するとユーザーネームとパスワードを順番に聞かれるので、
先ほど発行した公開鍵(Public Key)をユーザーネームに、秘密鍵(Private Key)をパスワードとして入力します。

無事通れば
「Do you want to store credentials for repo.magento.com in /<ホームディレクトリ>/.composer/auth.json ? [Yn]」
と聞かれるので「y」として実行します。

これでファイルのダウンロードが始まるので後は終わるまで待つだけ
…のはずが今回エラーが起きてしまいました。

赤背景のエラーメッセージには
「Your requirements could not be resolved to an installable set of packages.」
とあるので、どうもインストールに必要な要件を満たしていないためエラーとなっているようです。

確認する限りでは要件は満たしていたはずなのにおかしいですね…
詳細が下のメッセージに表示されているので確認したところ、
「magento/product-comunity-edition 2.2.2 requires php 7.0.2|7.0.4|~7.0.6|~7.1.0 -> your php version (5.5.35) does not satisfy that requirement.
とあるのでどうもPHPのバージョンが低いと言われているようです。

再度ロリポップの管理画面でPHPのバージョンを確認するもやはり7.1であることは確かのようです。
ということはSSHでPHPを実行する際は管理画面で指定したものとは違うバージョンで実行されているということのようです。

調べてみると普通にロリポップに解決策が記載されていました。
どうやらSSHで任意のバージョンのPHPを使用する場合はパスを指定する必要があったようです。

再度PHP7.1を下記のように指定して実行します。

/usr/local/php7.1/bin/php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition <インストールしたいディレクトリ>

長い・・・
しかも今度は違うエラーが出てきました。

「Project directory web/magento/ is not empty.」
とのことなので、ダウンロード先のディレクトリの中身が空じゃないので怒られているようです。

1回目の実行である程度ファイルが落ちていたようですね。
わざわざFTPに接続して該当ディレクトリの中身を消すのも面倒くさいのでこのままコマンドで削除してしまいましょう。

以下のコマンドで一旦「web/magento」をディレクトリごと削除します。

rm -r web/magento

そしてもう一度実行します。

今度こそ無事成功したようで次々とファイルがダウンロードされてきます。

最後に「Writing lock file」「Generationg autoload files」とメッセージが出て動きが止まったので良く分からないのですが、とりあえず正常に終了したということで良さそうです。

Magentoのインストール

早速「http://xxxx.com/magento/」へアクセスしてみます。

するとセットアップ画面が表示されるので問題はなさそうです。このままインストール作業を進めましょう。

Agree and Setup Magento」を選択します。

STEP1

最初のステップではインストールするサーバーが要件を満たしているかのチェックになるようです。
Start Readiness Check」を選択してチェックを実行します。

全てのチェックに通ったので「Completed! you can now move on to the next step.」と表示されました。
言われた通り次に進みましょう。画面右上の「NEXT」ボタンより次に進みます。

STEP2

次のステップはデータベースの設定になるようです。
ロリポップの管理画面からデータベースの情報を調べて入力していきましょう。

STEP3

次はショップのURLと管理画面のURLの設定です。Wordpressと同じ感じですね。
今回はショップURLはそのままで管理画面のURLを「admin」としました。

「Advanced Options」をクリックするとSSLの設定などができるようですが、ちょっとよく分からなかったのでそのままにしています。

STEP4

STEP4はデフォルトのタイムゾーンや通貨、言語の指定になるようです。
なので、
Time Zone(タイムゾーン)を「Japan Standard Time(Asia/Tokyo)」
Currency(通貨)を「Japanese Yen(JPY)」
Language(言語)を「Japanese(Japan)」
と設定しました。

「Advance Modules Configurations」には拡張モジュールと思われるリストが表示されるのですがここも良く分からないのでそのままにしておきます。

STEP5

次に管理者アカウントの作成になります。
ユーザーネームやメールアドレス、パスワードを入力して次に進みます。

STEP6

特に何もないです、インストール準備の完了を知らせる画面のようです。

早速「Install Now」ボタンを選択してインストールを実行しましょう。

インストールが無事完了すると「Success」という画面に遷移し、管理画面のURLや管理者アカウントなど重要な情報が表示されるので忘れないように保管しておきましょう。

そして最後にセキュリティのため「インストールしたディレクトリ/app/etc」の書き込み権限を無効にしておきましょうとメッセージが出ているので、該当ディレクトリのパーミッションを変更しておきます。

もう一度「http://xxxx.com/magento/」にアクセスしてみるとちゃんとデフォルトテンプレートのTOPページが表示されているのが確認できます。

続いて「http://xxxx.com/magento/admin/」にアクセスすると管理画面へのログインページが表示されるのが確認できます。

先ほど設定して管理者アカウントでログインしましょう。
問題なくログインできたらとりあえずはインストール完了です。
長い道のりでした…

最後の調整

管理画面にアクセスすると画面上部に
One or more indexers are invalid. Make sure your Magento cron job is running.」とメッセージが出ていると思います。

なんのこっちゃ分かりませんがとりあえず調べたところ以下の処理で対処できるようです。

まずコンソール画面に戻り、Magentoをインストールしたディレクトリまで移動します。今回なら「web/magento」ですね。

cd web/magento

移動したら次のコマンドを実行します。

/usr/local/php7.1/bin/php bin/magento indexer:reindex

これで再度管理画面に戻ると先ほどのメッセージは無くなっていたのですが、今度は別のメッセージが出るようになっていました。

「One or more of the Cache Types are invalidated: Page Cache. Please go to Cache Management and refresh cache types.」

ページキャッシュがどうのこうで、キャッシュ管理画面に行ってキャッシュタイプをリフレッシュしろ?ということなので、まずは「キャッシュ管理画面」とやらを探します。

今考えたらエラーメッセージに思いっきりリンクついてるっぽいんでこっから普通にアクセスできたと思うんですが、とりあえず場所は管理メニューの「SYSTEM」→「Cahce Management」にあります。

Cache Managementページ画面右上に「Flush Magento Cache」というボタンがあるのでそれを選択します。

「The Magento cache storage has been flushed.」
とメッセージが出ればOKなようです。
恐らくこれで何もメッセージは無くなったと思います。

ローカライズについて

管理画面内全てが英語で表示されるので、ここはさすがに日本語化したいところですよね。
日本語化エクステンションは有り難いことにベリテワークス株式会社さんが無償で提供していただいています。

それでは早速日本語化エクステンションの適用手順をご紹介・・・と言いたいところですが、ロリポップでは日本語化エクステンションの適用がどうにもうまくいかず今現在も手詰まり状態です。

もしうまく解消できたらまた記事にしますので、今回はインストールまでということでご容赦ください。

最後に

今回格安サーバーのロリポップにもインストールまではできるよということで備忘録も兼ねてご紹介させていただきましたが、本当にがっつりMagentoを使いたいという人はエクステンションの件もありますし、ちゃんとサーバーを吟味した方が良さそうですね。

またインストールのみで実際の機能の面などは分からず仕舞いだったので機会があればその辺の紹介も出来ればいいですね。

それではまた。

Viewing all 33 articles
Browse latest View live