カテゴリー
movabletype(mt) Perl

MT7に独自のコンテンツフィールドを追加する

この記事は「Movable Type Advent Calendar 2017」の12日目の記事です。 MovableTypeは2017年の10月に行われたMTDDCで、時期バージョンとなるMovable Type 7を4月にリリースすると発表がありました。 イベントに出席された方は知っているかもしれませんが、今回大きく変わる部分が、コンテンツタイプという概念です。 コンテンツタイプとは簡単にいうと、作成するページに応じて項目の数や種類などが設定でき、コンテンツに応じた管理画面にできるということです。 WordPressを使うよって人はカスタム投稿タイプを作って、カスタム投稿タイプにカスタムフィールドを作成して関連づけるということをしていると思いますが、それに近いイメージではないかなと思います。 今までは記事、もしくはウェブページという2つのコンテンツタイプしか存在せず、そこにカスタムフィールドをつけたり、ブログを複数に分けたりという対応をせざるを得ないというのがMTを使う上でのお決まりでしたが、その必要も無くなります。 今までのMTで商品紹介ページを作る場合、商品が多くなってくるとカテゴリ分けをしたくなります。「パソコン」だったり「周辺機器」だったり。 パソコンの中でもさらに種別をつけたくて「Mac」「Windows」 「Mac」の中でも「iMac」「Mac Book」 「iMac」の中でディスプレイサイズ、年式などなど。。。 分ければ分けるだけ、検索などでも探しやすくなったりはしますが、管理画面が複雑になっていきます。「パソコン」でブログを作ってその中でカテゴリを作って。。。 カテゴリはブログで1つしか使えないから、トップカテゴリを大項目、2階層目が中項目、その下が小項目。。。 タグはスペックを分けるのに使いましょう。16Gや32bitなどなど。。。 試行錯誤してできた管理画面にもブログや記事などの言葉が出てきて下記のようなマニュアルを作ってみたり。。。

これまでのたくさんの工夫と努力をしてきましたが、それが簡単にできるようです。 標準のコンテンツタイプとコンテンツフィールドでできることが増えたので、ほとんどの場合、このままでもコンテンツが作成できるかと思いますが もし自分で増やせるとしたらどうでしょう? 増やしてみたくなりますよね!(エンジニアのみなさん時間です まだコンテンツタイプの公式なプラグインの作り方などドキュメントはないので、少しだけソースを読んでみましょう。 registryの中に新たに「content_field_types」というものがあるようです。 lib/MT/ContentFieldType.pmの中になにやら色々と標準のコンテンツフィールドが定義されており、その中でlabelやdata_type、orderなどがあります。
  • label フィールド一覧に表示される名前?
  • data_type 保存するデータのタイプ?「integer」や「varchar」
  • order 表示される順番?
  • field_html 管理画面で表示されるHTML?
  • field_html_params 管理画面で表示されるHTMLに渡すパラメータ?
  • options コンテンツフィールドのオプション?。例えば数字だとMAX値とかMIN値とか。入力に何か制限かけたい時や、フィールド毎に設定をもたせたい場合に使う?
  • options_html 上記オプションを設定させるときに表示するHTMLの設定?
こんな感じで色々なことができるみたいです。 ここで書いたものはあくまでアルファバージョンのソースコードを読み解いた結果なので、リリースまであと4ヶ月くらいで全然別物になっていることもあるかもしれませんが、少なくとも項目を自由に増やしたり、増やし方も自由度が高くて開発できる人さえいれば、かなり柔軟な管理画面が作れそうです。 これまでもコールバックやプラグインなどの仕組みを使うと、全く別のCMSを作ることだってできるのですが、今回追加されているコンテンツタイプやコンテンツフィールドという仕組みにも、こうした細かく追加できるように作られているようです。 ここで、何か簡単なプラグインを作ってみる予定、、、でしたが、ちょっと時間不足でした。 時間を作れるタイミングで何か作ります。  
カテゴリー
movabletype(mt)

MovableTypeが15周年なので色々と振り返ってみました

この記事を見て、久々にブログを書いてみようと思いました。

Movable Type、15周年になりました! #MT15th – 広報ブログ | シックス・アパート – CMSソフトウェア、サービスを提供

まずは15周年おめでとうございます!!

15年前何をしていたのだろう

15年・・・自分は15年前何をしていたのだろうと考えると、今33だから18!?
まだ専門学校生ってことは、プログラミングもできなければMTが生まれたことすら全然知らなかった。

そんなときからMovableTypeは生まれて、ここまで進化を続けてきたんですね。

最近ではCMSといえば・・・

最近ではCMSといえば『世界のWebサイト17.5%がWordPress』とか言われ、
フリーランスとしてホームページ制作のお手伝いなんかをしていても更新したいからWordPressで作ってくださいなどと言われることも多くなりました。

そんな中、僕はMovableType派です!!(このブログはWordPress練習用なのでWordPressでできてますが。。。)

ちなみに今フリーランスとしてやっておりますが、フリーランスとしてやっていけるのもMovableTypeと出会ったからと言っても嘘ではありません。
MovableTypeのカスタマイズ、サイト移行のお話がいただけるのはもちろん。
MovableTypeと出会わなければこんなにPerlを書くこともなく、今はRailsが熱いんでしょ?とか言ってたかもしれません(別にRailsをdisるわけではなくて)

Perlって言語が書けるおかげで仕事がもらえたりっていう副産物もやはりMovableTypeと出会ったおかげだと思ってます。

Perlとの出会いとそれから

フリーランスになるまでで書いたかもしれないですが、
最初はVB、そのあと独学でJava、PHPをちょっと書けるというスペックで会社へ入社しました。

そこへ来て突然のCMSプロダクトを保守、運用の指令。

そのプロダクトはMovableTypeをプラグインなどでカスタマイズして作成したもの。
当然MovableTypeの知識が必要になります。

MT?ミッション車の話?

というくらいの知識でCMSってなにそれ?というところから始まりました。

最初はひたすらソースを読む。読む。読む。

社内で作られているソース、ネットで検索して出てきたプラグインのソース

そもそもPerlは専門学校の時に同窓会用のホームページの管理を任され、
CGIってなんだろう?ってところでPerlの本と出会ったけど、
数分でノックアウト。(それ以来その本は開かずに、引越し時に捨ててしまった。)

一度挫折しているPerlだけど、読めば読むほど、書き方が人それぞれだったり、
後置のifなどが便利だったりして嫌いにならずにすんだ。

それでも最初はPerlの独特な書き方や記号に頭抱えてました。

MovableType自体も慣れてくると面白くて、
なんでもかんでもMTでプラグイン入れたらできるじゃんと言い、
同僚や先輩から「いや、別にMTにこだわらなくても・・・」とか言われる始末。

プラグインを作ったことがある人ならわかるかもしれませんが、
MovableTypeはただのCMSではなく、フレームワークとしてもものすごく便利に使えるし、
機能の拡張なんかもすごく簡単にできるのです。

もちろんCMSとしても素晴らしくて、
テンプレートも、HTML側とプラグラム側をしっかり分離できるから、書いていて気持ちがいいというか、
HTMLは別の人が書いてそれをテンプレート化するのもすごく楽にできる。

そんなこんなでMovableTypeの開発に面白さを感じて9年、
今はMovableType本体に少しコミットできるまでになりました。

そんなこと当時はまったく想像していなくて、
MovableType本体のソースを読みながらこんなすごいもの作る人たちはどんな人なのかと想像するのが精一杯。

そんなMovableTypeも今年で15周年

MovableTypeは今年で15周年。

MovableTypeが30周年になる時は自分は48か。もうすぐ50か。

家族を路頭に迷わせないように頑張らなきゃ。

カテゴリー
movabletype(mt) Perl

MTでアップグレードが終わらない時にはコマンドから実行しよう

MovableType(MT)のアップグレード

毎回毎回お久しぶりの記事になってしまいます。。。

さて、今回はある案件でMTのバージョンを上げる、つまりはアップグレードするという案件がありました。

通常MTのバージョンアップは簡単です。

  1. 最新バージョンのファイルをFTPやSFTPでサーバーにアップロードする
  2. 管理画面にアクセスするとアップグレードを促される
  3. ログインしてアップグレードが始まる
  4. 終わったらアップグレード後のMTが使える

このアップグレードはデータが少ない環境であれば、ほんの数秒で終わります。

ただし、データ量、環境によってはアップグレードにものすごく時間がかかります。

MTのアップグレードはあまりに時間が長くかかってしまうと、たいていのサーバーでタイムアウトの処理が走り、アップグレード自体の処理も途中で止まってしまいます。

サーバー自体の設定をいじっても、何時間もかかってしまうような処理だと今度はデータベースでトラブルが起きたりと、トラブルのオンパレードに見舞われてしまいました。

もうあんな思いはしたくない!!

MTアップグレードはコマンド実行で簡単に

ある方のアドバイスにより、便利なコマンドツールがあるよ!ということで試してみました。

なんと、アップグレードをウェブから画面で行うのではなく、コマンドを実行するだけで完了するという便利なツールです。

使い方は簡単!mtがインストールされているディレクトリのtools/upgradeを起動するだけ

# cd dir_to_mt
#perl tools/upgrade --name=admin

そのままでは実行できないので必要なオプションを指定します。

  • –name アップグレードを実行するユーザを指定します
  • –sql アップグレードを実行した時にデータベースに投げられるSQLを表示させる(このオプションを指定するとdryrunも指定したことになるので、アップグレード処理は実行されません)
  • –dryrun アップグレード処理は実行せず、実行した際のログだけ表示する

ここでMTをプラグインなどでカスタマイズしている人は、外部モジュールなどを使っている場合、モジュールにパスが通っておらず、エラーになってしまう場合があります。

upgradeシェルは中身を見てもらうとわかるのですが、perlでできています。(コマンド打つ時もperlって打ってるしね)

なので、実行時にモジュールを指定してあげることで解決できます。

 # perl -I "modules/ex"  tools/upgrade --name=admin

このコマンドを実行して後は待つだけ。

ブラウザとにらめっこしながら、タイムアウトになったらどうしようなんて心配もいらない。

幸せなアップグレード、幸せなMovableTypeライフを!