Movable TypeプラグインAssetExifの制作プロセス、はじめてプラグインを制作した人からの必要なリソース、勉強法、気づいた点などついていろいろと書いてみました。これからMoavleTypeプラグイン作成をお考えの方に 少しでも参考・キッカケになるようなことを拾えてもらえたらうれしいです。
先日はじめてMovableTypeプラグインを制作、リリースしました。コードが汚かったり、フローがおかしいという部分等ありますが、はじめてにしては上出来だと自分の中では納得しています。
今回はこれからMoavleTypeプラグイン作成をお考えの方に制作経験から必要なリソース、勉強法、気づいた点など、AssetExifプラグイン制作プロセスも織り交ぜ、必要だと思う項目について書いておきます。※phpに対応していないので完成物とはいえないかもしれないですがご容赦。
MTプラグイン制作公開している人たちは、それを生業としているプロフェッショナルな方ばかり、その方たちがおっしゃる勉強方法はとても参考になります。ただ、はじめてプラグインを形にすることができた人から思った、感じた制作に必要なプロセスも知ってもらうことで制作の参考・何かのキッカケにして頂けたらと思います。書いてみたもののとても長く、ストレスがあります。(他にも原因ありますが)ざっと読んでもらい、一つでも参考になるようなことを拾ってもらえればと思っています。
まず、プラグイン作成で経験したことから以下のことは伝えておきたいです。(生言ってすみません)
「まずはPerlの知識を身につけ、人の作ったプラグインのソースを読んで、そこから再度必要な部分の知識を深める、すぐにコード書いて動作させてみる。(はじめてのPerlに書かれている知識[13章まで]は最低限必要かと)」
「ひたすらデバッグ。MTプラグインに必要なMTオブジェクトをログに吐かせて、データベースからどんなデータを抜き出すことができるのかを知る、わかるためにデバッグする」
「対象(扱う人)を絞って、メリットを取り上げてみて(いくつか)、目的を持った設計を行ってからプラグイン作成をするといい」
ということです。
MovabletTypeプラグインAssetExif制作プロセス
1.Perlを勉強
まずは、MTプラグイン作成のためにはPerlの勉強が絶対不可欠です。まずは、Perlの勉強から。初めてのPerlがオライリーから出ています。これオススメです。AssetExifプラグインもこの初めてのPerlで紹介されている最初のプラグラムのフローを参考にしています。何度も読み返すことが重要だと思います。
- ランダル・L. シュワルツ トム フェニックス
- 単行本 / オライリージャパン
- Amazon 売り上げランキング: 20279
- Amazon おすすめ度の平均:
これほど面白い本はそうそうないです
素晴らしきPerlの世界への案内
読み物としても十分面白い
定番書
初心者も持っておきたい一冊
目 次
Perl入門
スカラーデータ
リストと配列
サブルーチン
ハッシュ
入出力の基本
正規表現の基本
正規表現の詳細
正規表現の利用法
さまざまな制御構造〔ほか〕
デザイナーの方もMTテンプレートタグの振る舞い・変数の設定・動作などをMT本を勉強するよりも初めてのPerlを読んでからの方が理解しやすく、他言語などの理解・応用などにも役立てれると思います。MT触るなら必読書といっても過言ではないような気がします。
初めてのPerlだけでMTプラグイン作成に必要なPerlの知識が身に付くわけではありません。何人かの方が薦められている続・初めてのPerl 改訂版なども読むといいですね。自分の場合は、ジャンプしてプログラミングPerl〈VOLUME1〉で関数の働きなどについてさらに詳しく調べ、Perlクックブック〈VOLUME1〉を購入してリファレンスに沿って関数の使い方などを勉強しています。Perlクックブック〈VOLUME1〉はマジオススメです。
あと、Perl勉強するとjavascript、jQuery(javvascriptライブラリー)はじめ、javascript理解にも役立つことが多いと思います。
2.開発環境を整える
Perl勉強に欠かせないのが開発環境LAMPの構築です。実際に自分でコード書いて、動作を出力しないと解らない、身につかない。そのためにLAMP環境を整えた方がいいです。
Ubuntu覚えるのが吉だと思う
MT勉強している方の多くはXAMMPを使って構築している方が多数みえますが、私は今後、他での活用範囲が広いlinux(自分はUbuntu)で開発環境を構築することをオススメします。(同時にlinux勉強も必要になりますが)
一応、MTをXAMMPで構築、plaggerを構築してまわしていた経験もありますが、たぶんXAMMP構築とUbuntu構築のコストを比べてみて、活用範囲、扱いやすさ、構築後のトラブル・今後のWEB構築にサーバー知識などが求められるようになってくることも踏まえて、Ubuntuなどのlinux環境で構築する方がよろしいかと思います。メディアサーバー構築DLAN(自宅のメディア機器をLANで繋いでデータ管理)にも活用できますし、他にクラウドに必要な知識も身につけれるきっかけにもなるかと。
linux構築のノウハウ・知識について
本屋で立ち読みしたんですがこの本いいですよ。とても親切丁寧にUbuntu構築を紹介してくれています。何冊か読みましたけど、一番解りやすいサーバー構築本だと思います。自分は、できる本シリーズFedra8でサーバー構築を購入、あとはググッて勉強。(サーバー管理責任者の本もよかったのですが、RedHatLinuxであったためFedora8の本を購入。)
- 大型本 / 日経BP出版センター
- Amazon 売り上げランキング: 19667
- Amazon おすすめ度の平均:
Ubuntuサーバの数少ない資料として(初心者?中級者までか?)
深い知識はなくても簡単にサーバーを構築できる手順を紹介。次いで,動画や音声を使ったマルチメディア系サーバーを,誰でも構築できるようにやさしく説明します。さらに,応用編として,Webサーバー,FTPサーバー,Sambaサーバー,SSHサーバーを立ち上げて活用するところまでを解説します。これ一冊で,誰でもサーバーを自分で構築して楽しめるようになります。
linux構築の為のハード
Vmwareなどを使ってWindowsでの仮想構築をしてもいいですし、自分の場合は最初VMでWindows環境にUbuntu構築、古いマシン使っていたこともあり動作遅いことから古いデスクトップマシンをオークションで購入、UbuntuインストールしてwindowsノートでSSH使ってコード書いていたりしました。現在はDellサーバーが安かったので購入(PowerEdgeSc440)、そちらでコード書いたり、ブログ書いたり、ネットしたり、IRCしたりと、メディア・ファイルサーバーとしても使っていますが、普通のマシンとして使うことがメインです。Ubuntuはすばらしいと思いました。環境構築コストも安くできました。
安価で構築すると考えるとD-sub15ピンの出力・LANつきの液晶が壊れたノートが安く手に入れて、外部モニターつなげればいいかも。(スペース・電力・購入金額などのコスト考えれば)
Ubuntu構築するなら、UbuntuServerインストールして、sudo apt-get update, sudo apt-get upgrade , sudo apt-get install ubuntu-desktopでGui環境でサーバー環境を。サーバー版とデスクトップ版に違いがあるようですから後々の仮想化までも踏まえて、UbuntuServerで環境構築がよろしいかと。
特にフォトショップやイラストレーター、フラッシュ、他WEBオーサリングソフトを使わなくてもいいようなら、サーバー購入して、ネットブックでSSH使ってみるのがいいのかな。他にDellInspiron12のOSUbuntuの39800円でも構築できそうな気がします。
3.人が作ったプラグインソースを読む
自分が作ってみたい(動作させたい機能などを決めて)プラグインのソースをよく読むことです。初めてのPerl読み、コードの一部を少し読めるようになれれば、それに合わせ他の人が作ったプラグインソースを読むことです。読むことでPerl勉強に必要な部分もわかるようになり、プラグイン制作に必要なステップの踏み方もアタリを付けやすいです。
ソースを読むことの理由でとてもいい記事取り上げておきます。
「Plaggerのソース嫁」の真意 - TokuLog 改めB日記
勉強が苦手な人向けの「遅延評価勉強法」 : ロケスタ社長日記
いきなりソース読んでも・・・
いきなりプラグインソースを読んでも理解に苦しむかもしれません(苦しみました)。そんなときはプラグイン作成指南本を読んでみるといいとも思います。最近何冊か出版されるようになりましたね。まだ買ってないんですが・・・。(必要になった時点で買ってみようかなと考えています)
もし、購入を検討されているようでしたら、以下の書籍がいいと思います。
- CSS Nite 上ノ郷谷 太一 蒲生 トシヒロ 荒木 勇次郎 藤本 壱 関根 元和 黒野 明子 柳 泰久 野田 純生 丹羽 章
- 単行本(ソフトカバー) / 毎日コミュニケーションズ
- Amazon 売り上げランキング: 155875
- Amazon おすすめ度の平均:
コピペして即実践!
MT経験者向け
初めて読むにはチンプンカンプン
Web製作者は必読のMT本です。
コミュニティの成果
目次
Introduction:Movable Type 4の概要とテンプレートの基本
1 Movable Type 4の概要/金子 順(シックス・アパート)
2 Movable Typeテンプレートの基本/上ノ郷谷 太一 (シックス・アパート)Track A:企業サイトへの応用
1 MT4を使ったビジネスサイト企画・設計/八木 明子(アークウェブ)
2 基礎からのテンプレートカスタマイズ/柳 泰久(@Style)
3 CMSとして使うMT4/蒲生 トシヒロ(ITプロフェッショナル)
4 企業サイト構築に役立つ、 実用的MTタグの組み方あれこれ/黒野 明子
5 「QuickPlugins」を利用したECサイト構築/森 雅人(クイックソリューション)Track B:プラグイン開発とカスタマイズ
1 MTタグ、JavaScriptを用いたサイトのカスタマイズ/ 荒木 勇次郎(小粋空間)
2 プラグインを利用したカスタマイズ/藤本 壱(The blog of H.Fujimoto)
3 MTプラグインを作ろう!/関根 元和(エムロジック)
4 教えて!プラグインを使ったステップアップ/小野崎 直昭(広告製版社)
5 管理画面のカスタマイズ/野田 純生(アルファサード)Track C:スキルアップのための環境構築
1 MTの設置・運用に関するTIPS/ 丹羽 章(Online Digital Clock Works)
出版されて時が経過していますが、最近購入しました。(第3版ってことは売れてる方ですよね・・・初版数知らないけど。)
Track B:プラグイン開発とカスタマイズ
3 MTプラグインを作ろう!/関根 元和(エムロジック)
を最初に読み、実際にコードを書いてみるといいと思います。
プラグイン開発には関係ないですが、他に
Introduction:Movable Type 4の概要とテンプレートの基本
1 Movable Type 4の概要/金子 順(シックス・アパート)
Track A:企業サイトへの応用
1 MT4を使ったビジネスサイト企画・設計/八木 明子(アークウェブ)
を読んでしっかりとサイト構築に必要な基礎知識(設計・フロー)なども理解しておくことで、これから必要とされてるプラグインのアイデアやベースなどにも役立てれると思います。(別件:私事の希望でサイト設計・フロー設計など事例と目的・効果などのリソースが今後注目されてくると思うので公開して欲しいなぁなんて)
(自分は、この本読んで、それからプラグインソースを読み、実際にコード書いて、動作させてみて、必要な知識は再度オライリー本を読んでの繰り返しでプラグイン作成しました。)
読んでないけど・・・関根 元和さんの書かれているリソースは読みやすくて理解しやすいです。説明が丁寧と感じますのでオススメしておきます。(レビューを読むとコードに誤りが何箇所かあるようですが、修正ソースなどの公開ページを開設したほうがいいような・・・)
目次
1 MTプラグインの特徴と使い方
2 MTプラグインを作る
3 テンプレートタグの拡張
4 プラグイン設定と多言語対応
5 コールバック
6 管理画面のカスタマイズ
7 MTオブジェクト
8 ダイナミックパブリッシング
9 MTPlugin‐Starter
10 デバッグ
MTプラグイン作成でこちらの本もオススメしておきます。出版からかなり時が経過していますが、それでも書かれている内容はすばらしいです。センスある内容ばかり。使えるリソースを最大限に利用する点での思考法(センス)を身につけれると思います。基本は今あるサービス(API)を使ってMTはじめブログシステムでどういった表現ができるのか、ということに挑戦している様を伺うことができます。使えるリソースをどういった形で加工して活用できるようにするのか、といったプラグイン作成の為のアイデア思考を養うのにとてもすばらしい内容です。オススメしておきます。
- 宮川 達彦 伊藤 直也
- 単行本 / オライリー・ジャパン
- Amazon 売り上げランキング: 160866
- Amazon おすすめ度の平均:
100に絞るところがよいかも
大好きな一冊!!
日本発のHACKS
日本発のオライリー本を評価したい
Blogいじりをする方必読
目次
1章 イントロダクション
2章 コードを書かないHack
3章 Blog Hackの基本
4章 Blog Hackの応用
5章 Movable Type
6章 Blosxom
7章 WebサービスをHackする
という感じで、書籍を読んで実際にコード書いて動作させてみて、あとは公開されているプラグインソースなども読み、ちょっと違った形に加工させるように考え、コードを書いてみることです。その際にPerlの知識で必要な部分を初めてのPerl等書籍で身につけるといったことの繰り返しでいいと思います。
とにかく、たくさんのソースを読み、使われているソースとフローを真似することだと思います。解らないコードが出てきたら、書籍からやググッて調べることです。ググる他にPerlユーザーの方たちの公開されている記事などもマメに読むようにするといいですよ。とても参考になります。
Perl-users.jp - 日本のPerlユーザのためのハブサイト
perl-mongers.org
この二つは抑えておきたいです。そこで紹介されているサイトなどもオススメです。
AssetExifプラグインを作成するの参考にさせていただいたプラグインソースとプロセス
きっかけ
MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(GPS Ready)を読んで、アップロードしたイメージファイルからファイルパスが取得できることがわかる。おーそれならと自分も思い描いたものを作りたいなから始まりました。(以前からplaggerを使って自分のフローを最適化したいがためにperlを勉強してましたが、オライリー本を買い揃えるようになったのはMTプラグインを作るためです。)
perlモジュールImage::ExifToolの実装
JSON をもとに del.icio.us のブックマーク情報を出力する DeliciousJSON プラグイン :: Weeeblog.net MT開発屋さん社員の方のブログからソース・プロセスなどを読んで、レンタルサーバーにないcpanモジュールを使うため方法を知る。そして該当するコードをググッてみたら、
MT4のソースコードを見て勉強しているのですが・・・人力はてなをみつけ、Other Common Directories | MovableType.org - Home of the MT Communityを読んでライセンスに問題ないならOKということでレンタルサーバーにインストールされていないモジュールPhil Harvey / Image-ExifTool-7.67 - search.cpan.orgを実装でき、使えるようになる。
レンタルサーバーにインストールされていないperlモジュールを使う場合、モージュールのライセンスを確認し、extlibフォルダの中に配置、プラグインコードでuse libの部分を追加する。
CMSだからマネージメントがメイン。詳細設定できるように
GoogleAnalyticsWidget | MovableType.org - Home of the MT Communityのソースコードを読んで、、ブログ設定ページから任意の値を持つ配列を作成する方法、実装を学び、そのフロー(プラグイン設定画面から設定できるように)と実装などについて、Mapper_Plugin - ogawa - エントリーなどに含まれる「mapタグ」をGoogle MapsやAlps Mapsなどのマッピングサービスを利用した地図画像に変換するプラグイン。 - Google Codeから$plugin->get_config_hash([$scope])の扱い、Movable Type Developer Documentationなどからも調べて学び、tmplファイルの作成(プラグイン設定画面構築)については、MTデフォルトプラグインのspamlookupを参考にカスタマイズ。ついでにキャッシュされるjavascriptももったいない感覚で使ったりと。
DBからデータ取得するのは
コンテキストのパラーメーターからassetのファイルパスを取得するのは、Movable Type Developer Guide: Table of Contents | MovableType.org - Home of the MT Community、The Template Context | MovableType.org - Home of the MT Communityを読んで、あとはMTプラグインの簡単なデバッグ方法 (エムロジック放課後プロジェクト)のデバッグ方法を使いパラメーターを何度も何度もログにはかせて、どんなデータが取得できるのかというのを調べることで実装できるようになりました。
このデバッグがキモです。データベースから任意のデータを取得して、加工して出力する動作のプラグイン作成がまず最初のプラグイン作成かと。そのためのパラメーターの値を知ることが重要。
MTテンプレートタグで定義されているものがパラーメーターで取得できると考えるといいです。<$MTAssetFilePath$>が定義されているのでAssetのファイルパスも取得できるというように考えていいと思います。ブログIDの取得は$ctx->stash('blog_id')、Asset関係の取得は$ctx->stash('asset')からといった感じで。
ターゲットの人に役立つ形で
あとは、今回のプラグイン使用者をデザイナー、MovableTypeを使ってブログを構築している人ということをターゲットに絞り、面倒なテンプレートタグを覚えさせないように、CMSということもありマネージメントし易さを考え、フラッシュデザイナーの方にも使えるようにxml形式、前々から流行っているjson形式で出力することでブログで使うプラグインという感覚の他にデータを生成できるアプリケーション的な意識も持たせれるように制作。json吐き出しは、MTデフォルトでのjsonモジュール使って吐き出しています。
デフォルトでインストールされているperlモジュールの存在と活用方法についても調べて知っておくことでアイデアの幅も変わってきます。perl-users.jpで紹介されている今日のCPANモジュール 目次やperl-mongers.orgでモジュール勉強してみたりするのもオススメです。
以上のようなプロセスでプラグイン作成ができたわけです。
4.Movable Type Developer Guideを読むといい
プラグイン作成で最初から最後までのフローはMovable Type Developer Guide: Table of Contents | MovableType.org - Home of the MT Communityを読むといいです。さまざまなプラグインがありますが、このガイドに沿って正しく制作されているものは少ないような・・・。ガイドラインを守ることは大事であると思います。自分も本家プラグインにアップするときには、このガイドラインに沿って作るつもりでいます。
Movable Type4.xで承認フローを実現する「簡易ワークフロー(EasyWorkflow)、Technology on Information - ToIさんなどの制作されたプラグインは、ガイドラインに近い形で作られているので参考になると思います。
大抵、このMovable Type Developer Guideを読むことでMTプラグイン作成の為の基礎知識を身につけることができるようになります。国内で紹介されているプラグイン作成についてのリソースもたぶんこちらを元にしているような感じです。
Movable Type Developer Documentationでパラーメータの取得他設定などさまざまな要素を取得するといいです。ここでMTプラグインに必要なコードを知ることができます。
5.デバッグが大切
perlのデバックすらよく解っていないですが、MTプラグインの簡単なデバッグ方法 (エムロジック放課後プロジェクト)に書かれている方法でデバッグすることで開発スピードと一緒に学習スピードが劇的に変わります。「あーちくしょう!解らない」というストレス削減にもいいです。
sub doLog {
my ($msg) = @_;
return unless defined($msg);
use MT::Log;
my $log = MT::Log->new;
$log->message($msg) ;
$log->save or die $log->errstr;
}
をサブルーチンの前に記述。サブルーチンの中で
変数を出力するdoLog($var);
文字列を出力するdoLog('hoge');
配列や、ハッシュを出力するuse Data::Dumper; doLog(Dumper($hash_ref));
をしてみることでパラーメーターや出力前の変数なども把握することができます。もちろんエラーも出力されますのでチョー便利。
キモはサブルーチンの中でのMT::Pluginオブジェクトの取得だった
$plugin = shift;するかしないかで欲しいデータが取得できる、できないって・・・全く解っていなかった話なんですが、なぜか$plugin=shift;とコード書いていて(最初のプラグイン設定内容がshiftされてしまう)、MT::Pluginオブジェクトの取得ができない。これに気がつく(解る)までに3週間ほどかかりましたw。($plugin=shift;たぶんMovable Type プロフェッショナル・スタイル MT4.1対応に書かれている関根さんのコードを見てそうしていたような・・・)
ついでにいろんなデフォルト設定手法なんかも理解できたり、値の取得手法もいくつか考えれるなと。躓いているときに考える時間を持てたのは結果よかったです。
なんでもかんでもコード書き換えてデバックしてみることで解決につながり、そこから学習スピード、開発スピードが劇的に変わりましたw。いやぁーデバッグするのはとても重要だとはじめて使って感じました。欲しいデータをどうやって取得するかを理解すると今後のプラグイン開発のためのアイデアが広がります。(Perlのデバックも覚えないととも実感)
Kazuho@Cybozu Labs: PERL5WEBDB で Movable Type デバッグの方法も便利そうなんですが、やってみたものの知識が足りなく正常動作できずにあきめてしまいました。後々、試してみるつもりでもいます。(apache2だと、設定ファイルが違ってくるような・・・)
6.エラー処理を実装する
プラグインを作ったはいいが実際に使うのは自分と同じ知識を持っている人ではありません。親切なアプリケーションは、エラーの内容が解るようになっています。記述すべき綴りを間違えたりするかもしれません(他にもあるんだろうと)。基本的にテンプレートタグの記述など間違いがあった場合は、MT側でエラー出力してくれます。
独自でプラグインタグに指定したパラメーターの値を設定できるようにし、出力動作に対して変化させることを考えるならば、綴りの間違いなどがあるかもしれません。そんなときのエラー出力を吐き出せるようにしておくことも大切であると思いました。エラーの吐き出し方はパターンによりますが、3パターンあります。試してみてdieでエラー吐かせるようにしました。
想定外の使い方で使用者が迷って困られてはマズイですからね、エラー出力実装も必要です。
7.設計が重要
結局はじめて制作してみて感じたことは、設計が重要だと思いました。ターゲットを絞る(使用者)、メリットをいくつかあげる、使用内容を絞る、そして今のネット界隈・業界でのデータのやり取りや需要などに合わせて作る。(時代に合わせて最適化するみたいな感覚・・・)
制作する前にメリットをいくつか明確に打ち出す、計画することで、そのために必要な動作、実装内容などが明確になります。そしてそれを実装するに必要な知識なども当然わかるようになりますので、制作前に事前に必要な情報にあたりをつけておくこもできるかと思います。スムーズに事を運ぶことができると思います。
こちらも併せてお読みになるといいですよ。[MT4LP5]プラグイン開発と応用 by 関根 元和[to-R]
自分の場合、半分自己満足、自己の需要部分からとも感じます・・・。
以上でプラグイン制作経験から得た知識、学習の仕方、プロセスなどのご紹介でした。(といっても一つだけなんですが・・・でもたくさんいろんなことを学ぶことができ大満足です)内容があまりにも長すぎますが、何か一つでも参考になるようなことが拾えてもらえればうれしいです。
いやぁー躓きすぎて・・・ムキになれて・・・楽しかったです(コード美しくないですが・・・)。
参考になるリソース
Movable Type4.xで承認フローを実現する「簡易ワークフロー(EasyWorkflow)を作成されたWEBディレクターの方もおられます。その方のMTプラグイン作成のための情報源記事も参考に読んでみられるといいですね。
MovableTypeのプラグインを作成する上で有益な情報源 - 小さな世界
MovableTypeのプラグインを作成する上で有益な情報源 その2 - 小さな世界
しばらくはAssetExifプラグインリリースページの制作でバージョンアップなど制作予定などありませんが、落ち着いたらいろんなアイデアがあるので形にしていきたいと思っています。
今回は説明一本調子よりもどこで躓き、どういった手法で解決法を知ったのかというプロセスを公開する、その方がいいんじゃないかと思って書きました。たぶん1年後はもっと短縮されているんじゃないかとw?・・・。
最近のトヨタCMも子供目線でパロってますよね。いろんなことに目線を変えて表現(アプローチ)してみる、クリアー・エコ・地域貢献などといった手法が多いCMですけど、ちょっとの伝え方の違いで新鮮さ・捉え易さを感じます。(ユーザーインサイトを調べ、イメージ戦略も考えて作っているんだと思いますが・・・)
ネットでこうした制作プロセス公開がいくつも積み重なって、関心のある者同士で改善サイクルをまわしてみるっていうのも面白いと思います。企業がMTをイントラネットと、カスタマーリレーションシップ向上を目的として導入する根底でもあると思います。
また、こうしたプロセスを公開される方が増えるいい傾向につながればいいかなぁーとも思います。どこで躓くかわかりません、制作プロセスでどこか共有できる内容がありましたら、公開して頂くことでMovableType活用の底上げにつながるかと思います。
apstarさんありがとうございます
といった感じでapstarさん開発がんばってください。(MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.6))うまくいえませんが、プロセスを伝えることが大切なのかと思って書きました。即答?ヒントよりも、どうやって解決を見つけたか、学んだかが重要ですよね。たぶんそこを伝えるのがキモかと思いました。
時間はかかると思いますが、日々ちょっとの時間を充てることで1年後には、成長を実感することができるようになると思います。まだまだ勉強することがたくさんあります。お互いがんばりましょう!









コメントする