tabimoba.net

とあるエンジニアの雑記帳

Wordpressのget_post関数のpost_contentで段落タグが抜けないようにする方法(the_content関数と同じ結果で出力する方法)

はじめに

Wordpressのget_post関数を使用すると、投稿や固定ページに関する値を取得することができますが、その post_contentオブジェクトより出力される結果には、段落タグが含まれません。(ただし、Wordpressのエディタのテキストモードで<p></p>ように明示的に入力された場合を除きます)

このため、post_contentオブジェクトの値をそのままechoすると、レイアウトが崩れてしまう等、意図しない表示結果(the_content関数の出力とは異なる結果)となる場合があります。

原因

Wordpressのエディタで編集した内容では、段落は段落タグ(<p></p>)ではなくそのまま改行コードで保存されます。

the_content関数を使用する場合は、出力の際にthe_contentフィルターが適用されますので、改行が<p></p>に置き換えられます。しかし、get_post関数のpost_contentオブジェクトの出力結果にはthe_contentフィルターが適用されませんので、the_content関数のように改行が置き換えられずに(DBに記録された通りにそのまま)出力されます。

対応方法

post_contentオブジェクトの出力結果に対して、the_contentフィルターを適用することで、the_content関数と同様の出力結果となります。

$post_id = 1;
$post = get_post($post_id);
echo apply_filters('the_content',$post->post_content);

これからCMSを使ったWebサイト構築を考えている方に知ってもらいたいこと。

釣りだとおもうけど、回答してみた。

q.hatena.ne.jp

要約すると次の通りです。

  • WordpressよりもMODx EvolutionやNetCommonsの方が覚えることが少なくて良いよ。(Wordpressを使わないのがベストということではなく、自分のレベルに有ったツールを選ぶのが大切という意味で)
  • 会員制サイトを構築する場合はHTTPS対応してね。(可能で有れば、全てHTTPSの方がベスト)
  • ECサイトはセキュリティもろもろ自分で見るのは大変だし、万が一のことが有ったときに大変なので、カラーミーショップ使った方が良いよ。
  • CMSのインストールとメンテナンスは出来るけど、サーバ管理が出来ないならば、専用サーバやVPSではなくて、共有サーバあるいは専有型マネージドサーバが良いよ。OSやミドルウェアは全てサーバ会社が面倒見てくれるから。
  • CMSを使ったサイト構築をお客さんに勧める場合は、メンテナンス契約は結ばないとだめだよ。CMSはインストールして終わりじゃ無くてインストール後もバージョンアップが必要だし何か有った際は調整も必要なので。
  • CMSのインストールとメンテナンスが出来なければ、JimdoやWeebly,WiX使った方が良いよ。操作簡単だし、CMSの面倒見なくて済むから。
  • メンテナンス契約を結べない場合も、JimdoやWeebly,WiX使った方が良いよ。手離れ最高!

これからCMSを使ったWebサイト構築を初めて考えている方の参考になれば。

Mac版Word2016でOneDrive for Business同期フォルダ上のファイルが開けない原因と対応方法

Mac版Word2016では、特定の条件下にあるOneDrive for Businessの同期フォルダ上にあるファイルを開こうとすると、「Wordで文書を開くことができません。アクセス権がありません。」と表示され、開くことができません。

f:id:tabimoba:20160221152030p:plain

原因

OneDrive for Businessの同期クライアントによって作成されるフォルダの名称による問題となります。
f:id:tabimoba:20160221151901p:plain

OneDriveクライアントでOneDrive for Businessの同期を設定すると、「OneDrive - 組織名」というフォルダが作成されます。
Windowsでは「OneDrive - 組織名」というフォルダですが、Macでは「OneDrive - \u7D44\u7E54\u540D」というフォルダ名となり、「組織名」という日本語の部分がUTF-16エンコードされた文字列に変更されます。

このフォルダ名に含まれる「\」(バックスラッシュ)がWord2016でファイルを開く際に不具合を生じさせる原因となっています。(「\」が含まれるフォルダ上あるファイルをWord2016で開こうとした場合は、この問題が必ず発生します。これは、OneDrive for Businessの同期フォルダに限りません)

この問題は、Office365に設定された組織名が全て英数字であれば問題は発生しませんが、日本語の(2バイト文字列を含む)組織名が設定されている場合は必ず発生します。

対応方法

現時点(2016/2/21時点)においては、OneDrive for Businessの同期フォルダ上での解決方法はありません。
このため、Wordで開きたいファイルを一旦デスクトップ等にコピーしてからファイルを開き、変更後に同期フォルダへ戻すという手順でファイルを更新することになります。

なお、OneDrive for Businessではなく、Dropbox等の他のオンラインストレージを利用している場合や、OneDrive(for Businessではない方)ではこの問題は発生しません。

海外でのスマートフォン、タブレットによるインターネットの利用方法と注意点

卒業旅行シーズンでもあるので、2〜3月に海外へ渡航される方に向けて、普段利用している手持ちの端末(スマートフォン、タブレットによるインターネット)を海外で利用する際の利用方法と注意点をまとめてみました。これから海外への渡航される方は、是非参考にしてみてください。

海外でインターネットを利用するには

海外で手持ちのスマートフォンやタブレットでインターネットへ接続する方法として、次の方法があります。

1.キャリア提供の海外パケット定額サービスを利用する

とりあえず面倒なことをせずに海外で手持ちのスマートフォン、タブレットを利用したい方におすすめな方法です。

Docomo,Softbank,Au各キャリアにおいては、「海外パケ・ホーダイ」や「海外パケットし放題」という名称で海外パケット定額サービスを提供しています。

利用料金は1日最大2,980円ですが、手持ちの端末(スマートフォン、タブレット)1台だけを持ち出すだけで良く、また渡航前後に特別な手続きを行うこと無く、現地に到着したら端末の電源を入れるだけですぐに使えるという点で手軽さがあります。

2.海外で利用可能なモバイルルーターをレンタルして利用する



受け取り・返却の手間と、破損・紛失に配慮しなければならないことを除けば、最もお勧め出来る方法です。

「イモトのWiFi」(グローバルデータ)やグローバルWiFiなどのサービスがあります。
国・地域によりますが1日あたり最低300円から定額インターネット接続が利用できます。
また、複数の端末でインターネット接続をシェアすることができますので、グループで1つのモバイルルーターを共有することで通信料金を大幅に節約することが出来ます。

受け取りは、宅配便あるいは空港にある受け取りカウンターで受け取ります。返却は空港の返却カウンターのポストに投函します。

なお、利用料金は定額ですが使い放題ではありません。一定量の通信量の閾値を超えるとインターネットが利用できなくなる場合があります。こちらはFair Use Policyとして各社の注意事項に示されていますので、ご注意ください。

関連する記事を以下に書いていますので、あわせてご覧ください。
海外向けWiFiルーターレンタルの注意点 :「定額」であるが「使い放題」ではない - 旅モバ

3.プリペイドSIMを購入して利用する

SIMロックフリー端末を持っている方、トラブルがあっても自己解決出来る自信のある方におすすめの方法です。

端末がSIMロックフリーの場合は、プリペイドSIMを購入して利用する方法があります。基本は現地(渡航先)で購入するものですが、一部のプリペイドSIMは、Amazonや楽天等で購入することができます。語学に不安の有る方や、現地で購入出来る自信の無い方は、渡航前に国内で購入するのが良いでしょう。

プリペイドSIMの一例として、米国の場合はReadySIMがあります。こちらは、Amazonで購入することが出来ます。1枚で標準、マイクロ、ナノ各サイズのSIMに対応していますので、SIMカッターやSIMアダプターの追加購入は不要です。現地に到着後に本SIMへ交換して端末の電源を入れると、数分で利用できるようになります。なお、短期間の滞在の場合は1GB、1週間程度の滞在の場合は2GB以上のSIMカードをお勧めします。

Amazonにレビューを書いていますので、詳しくはそちらをご覧ください。
あまり現地でインターネットを利用しない方向けの製品です。普段使いと同じレベルで使いたい方は上位製品をおすすめします。また、テザリング利用には注意が必要です。

4.現地のフリーWiFiを利用する

個人的には、あまりお勧め出来ない方法です。

現地のフリーWiFi(公衆WiFi)サービスを利用することで、通信費を掛けること無く現地でインターネットを利用することが出来ます。

しかし、フリーWiFiは利用可能な場所に制限があります。日本と同様にどこでも繋がるというものではなく、ホテルやショッピングセンター、駅などの特定の建物内でしか利用できない場合がほとんどです。あたかも海外ではどこでもフリーWiFiが繋がるように(日本はフリーWiFiが遅れていると)書いている記事を見かけますが、それはごく一部の国(タイや香港など)で、実際は日本と同程度あるいは日本よりちょっと充実している程度と考えるのが正しいです。

また、3G/4G回線ほどセキュリティは高くありません。SSIDを選択するだけで繋がるアクセスポイントは、WPA等の通信の暗号化が行われていないため、通信内容が盗聴される可能性がありますので、盗聴されると困るような重要なデータをやり取りする場合はHTTPS(SSL)に対応したサイトを利用する、VPNを利用する等の対策が必要となります。

なお、企業や自治体等が提供するものではなく、一般家庭や企業が暗号化を行わずに無線LANアクセスポイントを設置している場合があります。接続するとインターネットを利用することは出来るかもしれませんが、安全ではありません。前述のフリーWiFiと同様に情報が盗聴される可能性がありますし、ウイルスへの感染や端末への不正侵入等を行う目的で意図して(悪意を持って)設置されているアクセスポイントも存在しますので、このようなアクセスポイントへの接続は避けるべきです。

海外でインターネットを利用する際の注意点

モバイルルーターやテザリングで使用される場合ですが、スマートフォンやタブレットの「自動ダウンロード機能」や「自動アップデート機能」に注意しましょう。現地へ到着する前に端末の「自動ダウンロード機能」や「自動アップデート機能」は切ることを強くお勧めします。

「WiFi接続時のみアプリの自動アップデートや自動ダウンロードを行う」設定は、モバイルルーターやテザリング接続の場合意味をなしません。テザリング接続はWiFiで繋げる(繋がる)ためです。したがって、もし自動アップデートや自動ダウンロードが有効な場合、思わぬデータ量の消費が発生し、いざ使おうとしたときにはデータ量残りわずかという問題が発生する恐れがあります。現地到着後、数十分から1時間で使えなくなってしまったという状況も起こりかねません。

そのような問題で不幸な結果にならないためにも、事前に設定を変更しておきましょう。

IDCFクラウドのDNSでワイルドカードを利用するには

はじめに

以下のようなサブドメインを同じホストへ割り当てたい、かつexample.comのサブドメイン名は恒久的に同じホストである(他のホストに対してサブドメインを割り当てることは考えていない)場合は、ワイルドカードを利用すると1レコード追加するだけで、割り当てられたホストにおいてexample.com配下のサブドメイン全てを扱うことが出来るようになります。

aaa.example.com bbb.example.com ccc.example.com

例えば、Apacheの場合はVirtualHostでServerNameに公開したいサブドメインを含めたFQDNを記述するだけで、DNSの設定変更を行うこと無く、またDNSの「浸透」を考慮すること無く、すぐにそのサブドメインでのWebコンテンツ、Webシステムの公開が可能となりますので、非常に便利です。

IDCFクラウドのDNSでは、以下の手順でワイルドカードを利用することが可能です。

手順

レコード名を「*」(アスタリスク)にします。 タイプはAあるいはCNAMEとします。

詳細は以下を参照ください。

wildcard.png

IDCFクラウドのDNSでサブサブドメインを追加するには

手順

example.comというドメインの場合、example.comというゾーンと別にc6.example.comやc7.example.comというゾーンを追加することで、www.c6.example.comやwww.c7.example.comのようなサブサブドメイン(既存のサブドメイン配下のサブドメイン)が利用可能となります。

設定例

dns.png

LXDでコンテナがstop出来ない場合の対応方法

Ubuntu 15.10 + LXD 2.0.0.beta2で利用していますが、lxc stopやlxc restartを実行しても無反応となるため調べてみたところ、次の方法で強制的にコンテナを停止出来ることが分かりました。

--forceオプションをつけることでとりあえずstopできるようです。

$ lxc stop hoge --force

--forceしないと止められないのが気持ち悪いですね。

参考

LXD上のCentOS7にhttpdをインストールするには(特権コンテナを利用する)

はじめに

LXD上のCentOS7環境(コンテナ)にhttpd(Apache)をyumでインストールしようとすると、次のようなエラーが出てインストールに失敗します。

Installing : httpd-2.4.6-40.el7.centos.x86_64                                                                                                                                                                          6/6
Error unpacking rpm package httpd-2.4.6-40.el7.centos.x86_64
error: unpacking of archive failed on file /usr/sbin/suexec: cpio: cap_set_file
error: httpd-2.4.6-40.el7.centos.x86_64: install failed

これは、非特権コンテナであるため発生しているエラーとなります。

LXDでコンテナを作成すると通常は非特権コンテナとなりますが、CentOS7のように非特権コンテナで正常に動作しない、パッケージのインストールに失敗する場合は、特権コンテナを作成することで解決出来る場合があります。

LXC上のCentOS7にhttpdをインストールするまでの手順

まず最初に、LXDをインストールします。

https://linuxcontainers.org/ja/lxd/getting-started-cli/ より引用

# add-apt-repository ppa:ubuntu-lxc/lxd-stable
# apt-get update
# apt-get dist-upgrade
# apt-get install lxd

次に、 http://images.linuxcontainers.org/images/centos/7/amd64/default/ より、最新のlxd.tar.xz ファイル(CentOS7イメージ)をダウンロードします。

lxd.tar.xzをダウンロード後、イメージをインポートします。

# lxc image import lxd.tar.xz --alias centos/7

インポート後、CentOS7コンテナを構築出来るようになります。

rootユーザーで次のコマンドを実行すると、特権コンテナのCentOS7を作成することができます。

# lxc launch centos/7 test01 -c security.privileged=true

コンテナ作成後、次のコマンドを実行して作成したコンテナのシェルに入ります。

# lxc exec test01 /bin/bash

コンテナのシェルに入れたことを確認したら、yumを実行します。

[root@test01 ~]# yum install -y httpd

エラーにならずにyumの実行完了後に

Installed:
  httpd.x86_64 0:2.4.6-40.el7.centos

と表示されれば、httpdが正常にインストールされています。

余談

LXDに関する情報は国内外まだまだ乏しいですね。今回の場合も、ググるとDockerに関するものばかりで困りました・・・(Dockerの場合はaufsのバグ?絡みで同様の問題が発生していたようですね)。

私の場合はDockerよりもLXDの方がしっくりくるというか、Immutable InfrastructureをしたいわけではなくこれまでKVMで構築していたVMのような使い方をしたいために、VMの代替(軽量なLinux仮想環境)としてLXDを使っています。DockerはImmutable Infrastructureのための道具としては良いのですが、initプロセスのような機能が無いので、VMの代替としては使いづらいんですよね。

LXDを使い始めたきっかけは、これまでFreeBSD jailを使っていたので、Linuxにおける同様の使い勝手のものを探していたらLXDがあったとそんな感じです。LXDは、FreeBSDのports installのコンパイルで待たされるようなものが無いので、とても気軽に使えて良いですね。(pkgngはまだ枯れていないのと提供されるパッケージがportsと比べて古かったりするので、やっぱりportsを使ってしまう・・・)

欠点としては、Ubuntuでしか使えないのと、若干動きが怪しいこと(コンテナのstopやrestartが出来ない場合があったり)、まだまだ(これからも?)マイナーであるということでしょうか。

参考