Home > 2015
2015
5 月にお知らせしていた Japanese Bloggers Info のメンテナンスが、ようやく終わりました。
メンテナンス期間中は、ブログの閲覧しかできなかったんですが、再び新しいブログの登録ができるようになりました。
今回の問題は、Web アプリケーションを動かしている Google App Engine 上で、AuthSub という認証システムが使用不可になったことが原因です。
(もう少し正確にいうと、非推奨になったシステムを使い続けたクリボウのズボラさが原因です。すみません…。)
そして、認証システムの更新作業中に、これまた Master/Slave Datastore というデータシステムが使用不可になってしまい、アプリケーション自体が動かなくなってしまいました。それで、Master/Slave Datastore から High Replication Datastore へデータシステムの移行をしたのち、AuthSub から OAuth2 への認証システムの移行を行ったため、とても時間がかかってしまったというわけです。M/S から HRD への移行については、以下に少し書いているので、興味がある人はどうぞ。
…ということで、Japanese Bloggers Info でまたブログ登録ができるようになりましたので、まだ登録していなかった!という人も、ぜひ一度登録してみてくださいませ。
前回、Blogger テンプレートのウィジェットタグに新しい表現方法が登場 という記事を書きましたが、すぐにまた新しいウィジェットタグが追加されています。
何が追加されたかというと、以下のとおりです。
- b:elseif
- b:switch
- b:eval
- b:with
elseif
これまで、条件分岐では
b:if
(条件に合う場合)と b:else
(合わない場合)というのがあったんですが、条件に合わない場合に別の条件を追加する b:elseif
が新しく登場しています。下に掲載したのは、ページの種類によって表示する内容を切り替えるコード例です。<b:if cond='data:blog.pageType == "static_page"'>
静的ページに表示する内容
<b:elseif cond='data:blog.pageType == "item"'>
個別投稿ページに表示する内容
<b:else/>
それ以外のページに表示する内容
</b:if>
静的ページに表示する内容
<b:elseif cond='data:blog.pageType == "item"'>
個別投稿ページに表示する内容
<b:else/>
それ以外のページに表示する内容
</b:if>
switch
複数の条件分岐で参照するデータが同じ場合、
b:switch
というタグを使うこともできます。b:switch
に参照するデータ名を、b:case
に等しいかチェックする値を入れます。すると、該当した b:case
の後に記述した内容が表示されます。b:default
の後に記述した内容は、b:case
で等しい物がなかった場合に表示されます。上のコードと同じ内容を b:switch
で書き直したのが、下の例です。他のプログラム言語の switch でよく見られる break は要りません。「トップページの場合は」、「アーカイブページの場合は」などと、条件をどんどん付けくわえたい場合に便利です。
<b:switch var='data:blog.pageType'>
<b:case value="static_page" />
静的ページに表示する内容
<b:case value="item" />
個別投稿ページに表示する内容
<b:default />
それ以外のページに表示する内容
</b:switch>
<b:case value="static_page" />
静的ページに表示する内容
<b:case value="item" />
個別投稿ページに表示する内容
<b:default />
それ以外のページに表示する内容
</b:switch>
eval
b:eval は、文字列を式として実行するための文です。ちょっとした計算や文字列の連結をして、内容を表示するのに適しています。
例 1: 画像などに適用するスタイルシートに、画像の縦横の比率そのままで拡大・縮小させた値を記述する例です。
min-height: <b:eval expr="data:newWidth * data:height / data:width" />px;
(「新しい幅 × 高さ ÷ 幅」を計算して、「新しい高さ」を表示。)たとえば元の幅 width が 200 で、高さ height が 150、新しい幅 newWidth が 400 の場合には、(400 * 150 / 200) ということで、実際に以下の内容を表示します。
min-height: 300px;
例 2: 配列構造になったデータを直接表示する例。
<b:eval expr="data:post.labels[0].url" />
(投稿の一つ目のラベルのラベルページの URL を表示。)データを直接記述する
<data:post.labels[0].url/>
という書き方でもいいんじゃないかと試してみたんですが、これだとテンプレートを保存することができませんでした。従来、配列のような構造になっているデータについては b:loop
を使わないといけなかったのが、b:eval
でも直接記述できるようになったということのようです。例 3: 三項演算子の結果を書き出す例。三項演算子は、前回追加された表現でしたね。
<b:eval expr='data:post.allowComments ? "Comment" : "Comments Disabled" />
(投稿にコメント可能な場合「Comment」と表示、不可の場合は「Comments Disabled」と表示。)with
b:with を使うと、計算式の値などを一時的に格納する変数を作ることができます。
<b:with var='myComputedValue' value='50 + 40' >
<data:myComputedValue/>px;
</b:with>
(「50 + 40」の計算結果を「myComputedValue」に格納。その後、「px;」を付加して書き出し。)<data:myComputedValue/>px;
</b:with>
変数を書き出すのは、
<data:myComputedValue/>
と <b:eval expr='data:myComputedValue' />
のどちらを使ってもOKです。属性値としてなら expr:width='data:myComputedValue'
のように使います。なお、b:with
で囲んだエリア内でしか変数は使えないので、注意が必要です。あとがき
今回のテンプレートタグの仕様変更で、実際には内容を書き出さずに、変数を指定したり、計算をしたりできるようになりました。Blogger テンプレートでできることが、格段に広がった印象です。新しいテンプレートタグを駆使して、自分だけのテンプレートづくりに挑戦してみるのもいいかもしれません。テンプレートタグのこういう組み合わせで、こんなことができるよというアイデアがもしあれば、教えてくださいね。
関連: 参考:
Blogger のテンプレートには、ウィジェットタグという、一定の条件ごとに出力する HTML コードを変化させるための特別なタグが存在します。今回、このウィジェットタグに新しい表現方法が加わったと、Blogger Buzz が伝えています。
これまで、ウィジェットタグの中では
+
で値を連結したり-
で値を差し引いたり==
や!=
で値が等しいか等しくないかをチェックしたり<
や>
、<=
、>=
で値を比較したり
NOT 演算子
!
や not
を使って、「何かが true
(真)ではないとき」という条件を表現する。<b:if cond='!data:post.allowComments'>...
(コメントが可能でなければ…)これまでは、
<b:else/>
を使って表現していたヤツですね。三項演算子
?
と :
を使った三項演算子。?
の前の条件が true
(真)の場合は :
の前のもの、false
(偽)の場合は :
の後ろのものを表示します。<a expr:class='data:post.allowComments ? "comments" : "no-comments"' ...
(コメント可能な場合、a
要素の class
属性に comments
を指定し、不可能な場合は no-comments
を指定する。)これまた、
<b:if cond='...'>
と <b:else/>
を組み合わせて、表現していたものです。メンバシップ演算子
これは、ある値が集合の要素の 1 つであるかどうかをチェックするためのもの。
in
と contains
とが使えます。<b:if cond='data:blog.pageType in {"index", "archive"}'>...
(ページタイプがトップページかアーカイブページのときに…)<b:if cond='{"item", "static_page"} contains data:blog.pageType'>
(ページタイプが個別ページか静的ページのときに…)in
と contains
で、チェック対象の値と集合(もしくは配列)の記述順が逆になるので要注意。とはいえ、複数の <b:if cond='...'>
を併記する必要がないのは、便利です。AND 演算子
and
や &&
を使って、複数の条件をともに満たす場合について、記述可能に。<b:if cond='data:blog.pageType == "index" and data:post.allowComments'>...
(ページタイプがトップページで、かつコメント可能なとき…)以前は、
<b:if cond='...'>
をネスト(入れ子に)して実現していたもの。OR 演算子
or
や ||
を使って、複数の条件のうち、1 つでも満たす場合について、記述可能に。<b:if cond='data:blog.pageType == "index" or data:post.allowComments'>...
(ページタイプがトップページか、またはコメント可能なとき…)in
、contains
と同様、これからは <b:if cond='...'>
を何回も書かなくて済みます。括弧
( )
を使って、演算の順序を指定する。<div expr:style='"max-width: " + (data:width + 10) + "px;"'>...
(div 要素 style 属性の最大幅に、現在の横幅プラス 10 ピクセルした値を指定する。)これらの新しい演算子や表現を使うと、これまで Blogger テンプレートで条件分岐を記述していた、煩雑な作業が随分と楽になりそうですね。本格的に Blogger テンプレートをいじってみたい!という人は、ぜひ参考にしてください。
参考:

先日、こういうメールをもらいました。
一昨日「Japanese Bloggers Info」を見つけました、あまりメジャーではないBloggerに関する情報サイトの存在が心強いです、そこで見つけた諸々の情報を有効に使わせていただきます、ありがとうございます。
さて、登録を済ませまして私のブログも登録しようとしたのですが、ログイン認証の段階で、
「お知らせ: サポートが終了した API は 2015 年 4 月 20 日よりご利用いただけなくなりました。サービスを再びご利用いただくために、代替 API への移行をお願いいたします。」
とのことです、ブログ登録に代替の手段はありますでしょうか。
このエラーは、Japanese Bloggers Info (以下 JBI)を動かしている Google App Engine (以下 GAE)上で、認証システムとして AuthSub が使えなくなり、登録ユーザーの所有ブログ情報が取得できなくなったのが原因です。現在、新しい認証システム OAuth2 への移行を行っている途中です。
このメンテナンスの間、JBI サイト上では、以下の機能が使えません。
- JBI へのブログ登録
- JBI からのブログ削除
ご不便をおかけしますが、メンテナンス終了まで、もうしばらくお待ちください。
Blogger のアダルトコンテンツポリシーの変更がされるというニュースが、2 月にありました。
変更するとしていたコンテンツポリシーでは、
2015 年 3 月 23 日より、露骨な性描写やヌードを扱った画像および動画を Blogger で一般公開することはできなくなります。とのことで、露骨な性描写やヌードを扱った画像や動画が含まれている場合は、ブログの公開設定が強制的に「限定公開」になる予定でした。
…が、このコンテンツポリシーの変更が、公式に撤回されています。
で、現在のコンテンツポリシーがこちら。
「アダルトコンテンツポリシー」から「ポルノコンテンツポリシー」に名前が変わっていますね。
ブログにポルノまたは露骨な性描写のコンテンツが含まれる場合は、アダルト コンテンツの設定をオンにする必要があります。この設定をオンにするとブログで警告が表示されます。アダルト コンテンツを含むブログが検出され、ブログの警告表示がオフになっている場合は、Google がオーナーに代わって警告表示をオンにします。これが繰り返される場合、ブログを削除することがあります。というルールはこれまで通り。変更の知らせでヒヤリとした Blogger ユーザーも、ようやくホッと一息つけそうですね。