にしし ふぁくとりー:西村文宏 個人サイト

Presented by Nishishi via Movable Type. Last Updated: 2023/05/28. 17:29:21.

てがろぐVer.4をリリースした話

2年半ぶりのメジャーバージョンアップ

てがろぐうちのサイトで配布しているフリーCGIの中で、いま一番ユーザさんが多いように感じられるのが「てがろぐ」です。今のところ私が一番製作に力を入れているのもこれです。
先月(4月)末に、2年半ぶりにメジャーバージョンを上げて、Ver 4.0.0 をリリースしました。

前回(1月)の正式リリースバージョンが 3.9.0 でしたから、次は 3.10.0 にしても良かったのですけども、ちょっと大きめの機能として「ログインセキュリティ機能」と「予約投稿機能」を加えましたので、メジャーバージョンも更新して 4.0.0 にしました。

▼過去との互換性は100%、UIも変更なしで、操作感はそのまま

大きめの機能を加えたといっても、

  • UIは変わっていないので(※追加はあっても変更はないので)使い勝手が突然変わってしまうようなことはありませんし、
  • データファイルや設定ファイルの仕様も変わりませんから、動作環境にもバージョンアップ手順にも変更はありません。

過去との互換性は100%ありますから、必要なら(※必要性はないと思いますが)一度 Ver 4.0.0 にUPした後で、3.9.0 に戻すようなバージョンダウンも問題なく可能です。なので、気軽にバージョンアップして頂けます。

てがろぐの開発では、その辺(UIの維持とか互換性とか)も特に気を遣っているポイントです。
もし、バージョンアップによって「仕様や操作感が大きく変わります」みたいなことにしてしまうと、バージョンアップをためらう要因の1つになってしまいますよね。WordPressとかのCMSを古いバージョンのまま使っている方々は、たいていその辺のことを気にしてバージョンアップしないまま使っているのではないかと思いますが。
なので、そうならないように、システム的な「過去との互換性」も、UIの「無変更性(一貫性?)」も極力維持できるようにしたいと思っています。

今のところ、

  • 過去のどのバージョンからでも最新版にバージョンアップできますし、
  • 最新版から、過去のどのバージョンへもバージョンダウンできるハズ

です。
※もちろん、バージョンダウンすれば新機能は使えなくなりますが、バージョンダウン先で設定が読み込めなくなったり、投稿データが読み込めなくなったりはしないハズです。

▼メジャーバージョンの変遷

今回は2年半ぶりのメジャーバージョンアップだったわけですが、それ以前はもうちょっと間隔が狭くて、だいたい1年半間隔でリリースしてきました。
Ver 3.x.xでは細々した機能をちょくちょく加えていったからかな、という気もしますが、バージョンを重ねるごとに「大規模な機能」というのは少なくなってくるから、という理由もあるかもしれません。

  • Ver.1 初回リリースは 2017年12月。
  • Ver.1→2では、主に画像投稿機能を搭載。(2019年3月)
  • Ver.2→3では、主にカテゴリ機能を搭載。(2020年10月)
  • Ver.3→4では、主にログインセキュリティ機能・予約投稿機能を搭載。(2023年4月)

なお、Ver.2→3のときの話は、2020年10月のブログ記事「てがろぐVer.3開発とリリースの裏話」にちょっと書いています。

こんな感じの「今回の開発について」みたいな小話を、てがろぐの正式版をリリースするたびにブログ記事としてまとめようかな……と毎回思ってはいるのですけどもね。結局は、「今日のひとこと」(てがろぐ)とかに書き散らかすだけで、まとめることなく終わっています。
「これはブログネタとして一応メモっておくか……」みたいな感じで「今日のひとこと」に書いておくことがよくあるんですが、そこに書いた時点で満足してしまって、ブログ記事にしないことが結構あります。これはTwitter全盛期にもよくありましたけども。「ブログネタだな」と思った場合には、公開場所には書かずに留めておく方が良いのかもしれませんね……。^^;

ちなみに、最初の Ver 1.0.0 はこんなのだった、という話を今年の3月に「てがろぐ Before&After」に書きました。設定画面を比較してみて、「最初はここまで設定項目が少なかったのな……」と自分でもちょっと驚きました。

てがろぐ Ver.4 の機能

さて、Ver.4になった「てがろぐ」の主な新機能についてもちょいと語っておきます。
作った理由とか、今後の話とか。

▼ログインセキュリティ機能

てがろぐログイン制限設定最近は(ありがたいことに)ユーザさんも増えてきましたので、ちょいとセキュリティ周りの機能を加えておきたいな、とずっと思っていまして、それを加えました。

てがろぐにはこれまで「IDをロックする機能」がなかったんですよね……。
なので、ログイン画面からはパスワードの入力を無限に試行できました。
つまり、IDとパスワードの組み合わせをテキトーに試し放題だったわけです。(とはいえ、ローカルで動作するソフトウェアとは違って、Webサーバの反応速度はそこまで高速ではありませんから、1秒間に何百回ものログインを試行することはできないと思いますが。)

何にしても、さすがにその仕様はセキュリティ面でよろしくありませんから、

  • ログイン試行頻度を制限したり、
  • ログイン失敗回数に上限を設けたり、
  • ログインを試せるIPアドレスを制限したり

……できる3機能を用意しました

デフォルト設定では、1つ目の「ログイン試行頻度の制限」だけが有効になっています。
これは、パスワードを間違えてログインに失敗したら、その直後に最大2秒間だけIDをロックすることで、機械的なログイン試行の頻度を制限するセキュリティ機能です。1分間に最大30回しかログインを試せなくすることで、パスワード総当たり攻撃(ブルートフォースアタック)を難しくしよう、という機能です。

パスワードを人力でキー入力する場合、よほど短くない限り1秒くらいはかかるでしょうから、最大2秒間のロックが掛かっても(人間が入力する限りは)不便にはならないと思います。そもそも、てがろぐはログインしっぱなしで使われるケースが多いでしょうから、ログインフォームを使う頻度自体が低いでしょうし。

あとは、さらに(設定画面から設定すれば)「パスワードを指定回数ほど連続で間違えると、指定時間ほどIDをロックする機能」を有効にしたり、「ログインを試せるIPアドレスを制限」したりもできます。全部併用できるならそうすれば、より安全になるのではないかと思います。使えるセキュリティ設定はすべて使うのがお勧めです。

▼予約投稿機能

てがろぐ予約投稿設定てがろぐでは従来から投稿日時として「未来の日時」を指定することはできましたが、それは単に「未来の日時が表示される」というだけのことでした。
そのように投稿日時として未来の日時が指定された場合に、(従来通り)そのまま表示するのか、または予約投稿扱いにするのかを選べる設定機能を追加しました

そこで「予約投稿扱い」に設定しておけば、予約投稿機能が使えるようになります。予約するための特別な操作方法はなくて、ただ「未来の日時を投稿日時にしておけば、その日時が来るまで表示されない」という動作になります。

とはいえ、「予約投稿」という機能名から得られるイメージとは少々動作結果が異なるかもしれません。

  • 予約投稿という機能名から想像される機能はおそらく、『あらかじめ設定しておいた本文が、指定時刻になったら新規に投稿される』という機能だろうと思いますが、現状の機能はそうではありません。
  • 実際の機能は、『非表示状態になっていた投稿が、指定時刻になったら表示状態に切り替わる』という機能です。

つまり、予約していても、掲載位置(掲載順序)は元の投稿順のままで変わりません。

例えば、「Ⓐ予約した投稿」の後に何か別の「Ⓑ予約ではない普通の投稿」をしていれば、ⒶはⒷよりも下(=本来の掲載順の位置)に表示されます。
なので、「Ⓐ予約した投稿」の後に多数の「Ⓑ普通の投稿」を投稿していると、予約時刻が到来してもⒶの存在が閲覧者に気付かれない可能性が高くなります。

※予約投稿を絶対に先頭に表示させたい場合は、「先頭固定」機能を併用する必要があります。予約投稿をする際に「先頭固定」にチェックを入れておけば、その予約投稿は(予約時刻が来たら)先頭固定投稿として先頭に固定表示されます。(その場合、予約時刻の後にその投稿を再編集して「先頭固定」チェックをOFFにしないと、ずっと先頭に表示されたままになります。^^;)

▼将来的には……?

将来的には予約投稿らしい動作にしたい、という気はあるにはあります。一応は。今のところは。
開発予定の中には、「全投稿を指定日時順に再整列させる機能」もありますので、その機能が実装できた際には、「予約投稿の表示時には全投稿を自動で日付順に再整列する」というような設定機能も加えることで、予約投稿が必ず最新投稿として表示される、という仕様にもできる気はしています。そうなると、たぶん予約投稿らしい動作になるのではないかな、と思っています。

とはいえ、現状でも予約投稿としては機能しますので、急いで実装する必要性は高くはないと思っていますけども。
何にしても、投稿を日付順に並べ替える機能の実装はまだまだ先だと思います。^^;
何もかもを一気に実装することはできませんので、気長にお待ち頂ければ幸いです。

▼上書き用CSS登録機能

てがろぐ上書きCSS登録設定スキンのCSSを直接テキストエディタ等で書き換えなくても、管理画面から「上書き用CSSソース」を登録できる機能を用意しました

「配布スキンをほぼそのまま使っているが、配色等のほんの一部分だけは独自にカスタマイズして使っている」というケースもありますよね。そのとき、スキンに付属しているCSSファイルを直接編集すると、スキン側がバージョンアップしたときに、再度同じようにカスタマイズしないといけなくなって面倒です。

この機能を使うと、配布スキンをバージョンアップさせた場合にも、自分でカスタマイズした部分だけはそのまま維持し続けられる(可能性がある)メリットがあります。なお、スキン側には特別な工夫は要りませんので、いつ作られたスキンでも、この機能でCSSを追加できます。

※ここで登録した上書き用CSSソースは、基本的には「</head>タグの直前」に挿入されます。この機能のメリットは、「</head>タグの直前に追加CSSを挿入するので、スキン側に何の準備がなくても強制挿入できる点」です。既存スキンを何も編集しないままの状態で使えます。

ただ、複数のスキンを併用したい場合に調整が面倒になる可能性はありますけども。
どのスキンに対して上書きCSSソースを挿入するのかを設定で選択する機能がありますし、複数スキン併用時に強制挿入対象を絞りたい場合に使える専用記法も用意していますので、それらの機能を併用して頂くと、うまく運営しやすいのではないかと思っています。

▼その他いろいろ

そのほかにも追加機能は多々ありますが、あとはリリースノートをご覧下さい。
リリースノートは、めちゃくちゃ毎回がんばって書いていますので……!!
読んで……!!!

書くのが大変なので、書かずに済ませられるならそれに越したことはないんですけども。
でも、こういうドキュメントがないと、バージョンアップ時に「何が新しくなったのか」が分からないので、やっぱり用意するしかないよな……と思って、毎回用意しています。需要がどれくらいあるのかはよく分かりませんけども。^^;;;

ああ、そうそう。YouTubeとSpotifyの埋め込みサイズを管理画面上から設定できるようになりまして、特に(従来は縦長固定だった)Spotifyはもっと見やすく掲載できるようになったと思います。デフォルト設定を突然変更してしまうと不都合がある場合もあると思いましたので、デフォルトでの掲載サイズには変更ありません。しかし、たいていの場合は、横長に見えるサイズにする方が見やすい(+配置が楽な)のではないかと思います。(例えばここのように)。

ヘルプドキュメントをどうやって簡単に作るか

リリースノートも必要には違いないですが、それよりももっと必要なのはヘルプドキュメントですよね。これがないと、どんな機能があって、どんな設定ができるのかが分かりませんから。
基本的な機能を使うだけなら何も読まなくても使えるのではないかと思ってはいるのですけども、機能が多いですし、特にカスタマイズしようと思うと、「できるのかどうか」・「できるなら、どう書けば良いのか」みたいな情報を調べる必要がありますから、ヘルプドキュメントは必要ですよね。

ほぼ最初に1回参照すれば終わる「セットアップ(設置)方法」ページを除くと、主なヘルプドキュメントは以下の3ページあります。

たった3ページなのに、この3ページに書かれている文字数を調べると、ラノベ文庫本2冊分以上あるのが不思議なんですが。(笑)
半角文字を無視して全角文字だけをカウントしても27万文字超あります。改行なしで詰めて原稿用紙に書いたら680枚分くらいです。半角文字も含めると、だいたい35万文字くらいあります。(なんで……?)
私が過去に書いた文庫本は1冊だけですが、これで文字数は10万文字くらいでしたからね……。たしか。いや、もしかしたら12万文字くらいあったかもしれませんが。(昔のことすぎて正確には覚えていないのですけども。^^;)

▼β版公開の時点でヘルプドキュメントも更新する方針に変えた

で、バージョンアップで機能が増える度に、このヘルプドキュメント群にも追記していく必要があります。
基本は追記だけなんですが、機能が増えた結果として設定画面の構成が変化した場合には、過去の説明用画像も差し替えが必要になるケースもあります。
これらの作業もなかなか大変なんですよね……。

従来は、正式版リリースに合わせてヘルプドキュメント群を一括更新していたのですが、それだと(作業量が多すぎて)めちゃくちゃ凄まじく面倒くさすぎて大変なので(^_^;)、Ver 3.9.0リリースの後からは、β版で搭載した機能であっても最初から本番のヘルプドキュメントに解説を加えておく方針にしました。それによって、毎回のβ版公開時にちょっとずつヘルプドキュメントを更新していけるので、正式版リリースの際に大量の更新作業をする手間が減らせるだろうということで(減らせるというか分散するだけですけども)。

ヘルプドキュメント内の所々には、その機能がどのバージョン以降で使えるのかを示すためにバージョン番号が記載してあります。
従来は「Ver 3.8.0以降」とか「Ver 3.7.0以降」のように最後の1桁は「0」だったのですけども、3.9.0以降に関しては、細かく「Ver 3.9.2以降」とか「Ver 3.9.5以降」とか書かれているのはそのため(=β版の時点で記載したから)です。
この方針に変えたおかげで、今回の Ver 4.0.0 リリース時点では、そこまで大変にはならずに済みました。

▼検索しやすいFAQができれば良いのだけど

ヘルプドキュメントが縦長の長大ページになるのは仕方がないとしても、FAQは「1件1ページ」の構成で検索性を高める方が便利な気がしてはいるのですよね。できれば、FAQはそういう構造にしたいと思っています。
(縦長の長大ページでも、一覧性が増すメリットはあると思っているのですが。あと、すべての項目が繋がっていると、求めていた情報に関連する隣接情報も目に入りやすいですし。)

てがろぐのFAQ・豆知識ページを、てがろぐ自体を使って生成すれば、

  • 現状のような「まとめて閲覧」もできるし、
  • 「1ネタ1ページで閲覧」もできるし、
  • 全文検索もできる

……ので望ましそうに思えるのですけども。
ただ、あのFAQを作るにはHTMLソースを自由に書けないとまず無理なので(できるかもしれませんけどもかなり大変そうに思えますので)、てがろぐで生成できるようにしようと思うと、まず、てがろぐ上に自由なHTMLソースをそのまま書ける機能を実装する必要があるんですよね……。

あと、「FAQのHomeページ」もどうにかして生成する必要がありますね。
FAQ用のHomeページというと「カテゴリ別にFAQタイトルが並ぶ」という形態が定番だし分かりやすいと思うので、そんな感じのHomeを自動生成できる機能があると望ましいのですが。

今回のVer 4.0.0では、新着投稿リストをカテゴリ別に出力する機能も追加されましたので、それを使ってスキンを作れば、「カテゴリ別にFAQタイトルが並ぶ」というHomeは作れそうに思います(※新着順に掲載される順序仕様を良しとすれば)。ただ、その方法だと、カテゴリを新たに追加したときには(スキンHTMLの)手動修正が必要になるので運用がちょっと面倒になる問題がありそうです。

「すべてのカテゴリについて、カテゴリ別に分けつつ、各カテゴリに属する投稿タイトルだけを並べる」みたいな自動生成機能があれば良いのですけどもね。「カテゴリ別タイトル掲載機能」というような。FAQ以外でも何か需要はあるでしょうかね? FAQにしか使えなさそうなら、かなりニッチな機能になってしまいますが。(^_^;)

あと、FAQの場合は新着順で並べるよりも自ら掲載順や掲載対象を選択できる方が望ましい気もします。ただ、そうなってくると、てがろぐの管理画面では対処できなさそうな気もしますけども。まあ、並べたい順に投稿日時を手動で修正しておく手はありますが。もしくは、「下げる」機能を併用して、「下げられていない投稿だけがリストアップされる」みたいな感じにすれば良いかもしれません。

欲しい機能(?)

ご要望を頂いている他に個人的に欲しいと思っているのは、だいたい開発放言のてがろぐカテゴリに書き散らしていますけども、直近で欲しいのは(※作るとは言っていません^^;)「掲示板モード」かな、と思います。てがろぐを、不特定多数が利用できる掲示板として使いたいな、と思うことがありまして。現状だと、IDを事前に割り振る必要があるので不特定多数を対象にはできませんし、どうしても不特定多数を対象にしたい場合はゲスト投稿用のIDを1つ用意しておいてそれを使ってもらうくらいしか方法がありませんから。

具体的な機能としては、

  • ➊ IDを持たない不特定多数でも投稿者名をその都度入力して投稿できる機能。
  • ➋ 本文以外の入力欄(名前欄、タイトル欄、URL欄、SNS欄など)を好きなだけいくつでも入力フォームに追加できる機能。
  • ➌ IDを持たない投稿者が、自らの投稿を削除するためのパスワードを設定しておける機能。
  • ➍ 投稿があるたびに投稿された内容を管理者へメールで送る機能。

とかですかね。
どれも大きめの機能追加になりますから、作ろうと思うと時間が掛かります。本腰を入れて計画しないとまずできませんけども。(^_^;)
ただ、欲しいのは欲しいんですけどもね。個人的に。

掲示板CGIは世の中に山ほどありますけども、今でもメンテナンスされているように見えるCGIとなると結構少ないですしね……。まあ、もう完全に完成されていて「メンテナンスが不要になっている」という可能性もありますけども。

上記の ➋ があると、自分だけで使う場合でも、本文とは別にタイトル入力欄を用意して、よりブログ的に使う方法も採れるようになるかな……という気もなんとなくしています(そうしたい需要があるかどうかはともかく)。
上記の ➍ があると、一言メッセージ送信フォームみたいなのをサイドに掲載する機能の実装にも流用できるでしょうね。

作りたい機能(?)

なんとなく作りたいと思っている機能としては、「埋め込み専用モード」があります。

うちのサイトもそうですけども、「最新の1件だけを別ページに埋め込む」という需要がそこそこありますよね。
今は、埋め込み専用のスキンを作って、それをSSIやPHP等で埋め込む、みたいな方法が必要です。
しかし、その「専用スキンを作る方法」だと、仕様上「Powered-by表記」の掲載が必須になります。それを避けられる方法としては、RSSフィードとして出力された1件分のデータをJavaScript等で読む方法がありますけども、どちらにせよちょっと面倒ですよね。

なので、「最新の1件だけを出力できる」という埋め込み前提の専用モードがあればいいかな、という気がしています。
?mode=embed みたいなパラメータで。
この場合、?mode=embed&cat=info みたいに、パラメータにカテゴリID等を加えれば、その条件に合致する投稿の中で最新の1件が出力されるような。

この場合の出力フォーマットは管理画面上で登録できるようにしても良いですし、?mode=embed&skin=umekomi みたいに直接スキンを指定できるようにしても良いかもしれません。スキンを使う場合は、外側スキンは無視して、内側スキンだけを使って1件だけ出力する感じになるでしょうかね。

上記のような感じの「埋め込み専用モード」があれば、他ページへの埋め込みが楽になりそうな気がします。
SSIでもPHPでもJavaScriptでも何でも好きな方法で埋め込める(or読み込める)でしょうし。

要望を受けている機能も

要望を受けている機能もいろいろ多々ありますので、需要の高さや作りやすさ等を勘案して加えていくつもりでいます。
一部だけを先に実装していて、残りの機能は先送りしている機能としては、

  • 個別鍵での鍵付き(パスワード保護)投稿機能
  • 新着投稿リストのオプション指定機能

……などがありますかね。

ご要望があればお気軽にお知らせ下さい。作れるとは限りませんが、考慮はします。
あと、ご要望を頂く際にはその用途も一緒に説明して頂けると、直接ご要望の機能を実装できない場合でも代替手段を提供できる可能性があります。できるだけ詳しめに教えて頂けると望みが叶う可能性を上げられるかもしれません。

まだ開発は継続する予定

というわけで、まだまだ「てがろぐ」の開発は継続するつもりで居ます。
需要がそこそこありそうな点もそうですし、自分自身が日常的に使っているという点もそうですが。
今のところ、まだ開発モチベーションは維持できていますので。^^;

Ver.4になったてがろぐもご愛用頂ければ幸いです。

今後もできるだけ3ヶ月に1回ペースでの正式版リリースができるような感じで開発を進められると良いな……と思っています。
β版は随時公開していきますので、よろしければ開発進捗状況報告サイトでチェックして頂ければ幸いです。ここでフォロー頂くと(てがろぐCGIの最新β版や正式版の公開時に)メールで連絡を受け取ることもできるほか、私の開発モチベーションが向上するメリットもあります。😇

あと、てがろぐベースで開発したスケジュールカレンダー表示CGI「さんごよみ」もぜひ一緒によろしくです!

コメント

コメント数: 0件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※ご投稿頂いた内容は、掲載前に管理者が確認する設定にしている場合があります。たいていは数日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

著者紹介


にしし(西村文宏)

にししでございます。本書いたり記事書いたりしてます。あと萌えたり。著書5冊発売中です(Web製作系4冊+小説1冊)。著書や記事は「西村文宏」名義。記事は主にAll Aboutで連載。本の最新刊は2011年3月に発売されたライトノベルでございますよ。

Twitter:にしし/西村文宏
にしし/西村文宏 on facebook にしし/西村文宏 on mixi フォローはお気軽に!

にしし(西村文宏)連絡先
☕ コーヒーをおごる

著書一覧と詳細

にししふぁくとりー Sakura scope内限定での主要なカテゴリ

--- 当サイト内を検索 ---