^ page top

2017-03-28
 既成のシステムを利用してサイトを構築、ではなく、根幹部分のシステムそのものから自作した話。

 このブログ、というかブログが動いているCMSシステムは、僕が丸ごと FreePascal で自作したものなのですが(ライブラリを利用したので、正確には繋ぎ合わせたというべきか)、なんだかんだいいつつ、2012年から4年以上、使い続けています。個人ブログの規模じゃ、動いて当たり前との指摘もあるかとは思いますが、デスクトップアプリの経験はあっても、サーバ側、ましてや、Linux 上でのプログラムというのは、経験もほとんど無いまま、初めてづくしで開発・運用してきたわけです。

 当初は、とりあえず、必要な機能まで動くようになったら、改めて作り直すつもりだったのですが、ちまちまと修正を重ね、まぁ、いいかと、今に至り、正直、作り直す気力は残っていません。

 CMSシェアにおいて、WordPress の、ダントツ独走状態が続いています。結果的に言えば、わざわざ自作するよりも、WordPress を勉強しておけば色々と便利だったのかもしれません。しかし、逆を言うならば、CMS を自分で作るような人間は、超マイノリティであって、出来栄え度外視で、自己満足ポイントは、非常に高いのです。実際、WordPress で、カスタマイズ運用するのも、それなりに大変らしいし、何が正解ていうことでもないかもしれません。


 以下は、将来、作り直す気になった時のための反省点。

 このシステムは、ベース部分があって、後はそこに必要分のブログを、どんどん追加していく形式になっています。各ブログは独立しているわけで、個別に削除や移動もできるようバックアップ&リストア処理も組み込んでいます。しかし、この処理後に各記事のアクセスURLが変わってしまいかねないのは、どうもよろしくない。検索エンジンが、必ずしも期待通り追従してくれる保障もないし、一般サイトから外部リンクされているURLにしても同様。

 そもそも、これは、URLを、内部構造そのままの、ブログ番号+記事番号を使っていることに起因しています。ブログ番号をブログ名に、記事番号を記事タイトル名として、変換する処理をいれるのが、もしかしたら正しいのかもしれません。ただ、日本語をURLに含めるのは、どうも抵抗があるし、そもそも美しくない。せめて、記事番号ではなく、記事作成日時にするべきでした。

 このサイト自身、僕個人の実験スペースなので、宣伝の類は一切していないし、たまに、リンクをしてくれている奇特な方もいますが、アクセスの大半は、検索エンジンからです。別に商売に使っていなくても、検索エンジンとの繋がりであるURLに関しては注意を払う必要があります。

 実際の変換処理は、Apache 側のモジュールも関係しているとはいえ、この辺は、設計段階でキチンと決めておかないといけなかった。具体的には、記事番号ではなく、ユニークな記事作成日時をキーとして管理すれば良かったわけです。



 もう一つの反省点は、CSS。つまりデザインの部分。レスポンシブ ウェブ デザインというか、簡単にいえば、スマホ対応。コレを全く考慮していなかった。これは、そもそも、このブログにスマホでアクセスする必要はないし、PCユーザ向けと意図的に切り捨てた部分です。

 それ以前に、デザインそのものも僕のオリジナルなわけで、これが賢くなかった。修正を積み重ねたので、グダグダ。結論から言えば、最初から他のCMS用の優秀なCSSを流用、若しくはパクれる(笑)ように作るべきでした。そうすれば、デザインのバリエーションや、レスポンシブな点も、いっしょに解決できていたはずです。


 https 未対応。ブラウザのクロームや、グーグルの動きを見ていると、そのうち暗号化されていないサイトなんぞ相手にしてもらえなくなるかもしれません。商売でやってるサイトなんかは、問答無用で https にしないといけないようですが、個人の趣味サイトまで、https 化する必要があるのが、大いに疑問です。


 他にも、細かなことで言えば色々ありますが、初のサーバ側プログラムとしては、及第点と、甘めに採点しておきます。
2017-01-19
 ブラウザで更新しても、外部CSSのように間接的に読み込まれるファイルは、キャッシュを読み込んでしまって反映されない。対策としては、CSS 読み込みのアドレスの指定に、適当なクエリを追加すればいいらしい、クエリが変化した時点で、新規に読み込まれる。へー、なるほど。

 このブログシステムでも、CSS を更新したときに、クエリを自動で書き換えるようにした。かなり前に、この問題に気づいたが、面倒くさいので、ブラウザのキャッシュ全削除で、ごまかしてた。それだと、閲覧者のほうは変化ないから、全く解決にはなっていなかった。

2012-08-02
 基本構成は、トップページに、必要分のブログを追加する形。データベースも含めて、CGI 側で全て管理できるようにしてある。

 管理画面はこんな感じ。

バックアップ、CSS編集、ユーザ管理

ブログ・パラメータ

記事の新規作成

記事の編集

2012-08-02
 おおまかな実装終えて、修正作業だけなら、重い VNC 越しの Lazarus を使わなくてもいい。WinSCP 経由で編集して、FreePascal のコンパイラをコンソールから動かせばいい。

 ローカルの PC にインストールしてある Windows 版の Lazarus のエディタを編集に使うが、WinSCP から単純に外部エディタの指定をしても、余計な部分が邪魔で使いづらい。そこで、.lpi とかの足りないファイルを適当にでっち上げるプログラムを間に挟む。編集以外は出来なくても、やはり本家のエディタが便利。

 コンパイルは、CGIから実行できるようにしているので、ソースの更新(保存すると、WinSCPが自動でアップロード)した後、ボタン一発で完了する。

 クロスコンパイル?なにそれ。
2012-08-02

 実際の開発は、VMware 上で形になるまでテストした後、VPSサーバ上に移行した。
① Win版 Lazarus で、開発開始(Linuxに不慣れなので)。
VMware 上の Linux版 Lazarus 用に修正。
③ VPS上の Linux版 Lazarus で実働、デバッグ。

 Linux は、一番使いやすい気がする CentOS を選択。テスト環境も、レンタルVPSサーバも扱いは同じ仮想マシン。接続先のアドレスが違うだけで、ツール類は、そのまま使える。いちいち変更の度にアップロードとか面倒なので、遅くてイライラしつつも、直接VPS側でデバッグすることになる。
PuTTYjp コンソール
  http://hp.vector.co.jp/authors/VA024651/PuTTYkj.html
WinSCP ファイル転送
  http://winscp.net/eng/docs/lang:jp
UltraVNC リモートデスクトップ
  http://www.uvnc.com/
 プログラム言語は、FreePascal。Lazarus は、エディタとデバッグのためだけに使用。フォーム付きのアプリつくるわけじゃないから、不安定さは感じない。
Free Pascal オブジェクト・パスカル
  http://www.freepascal.org/
Lazarus Free Pascal IDE
  http://www.lazarus.freepascal.org/
 CGIのプログラム中で、データベースを作成・修正するが、デバッグ中の確認や修正には、外部ツールを使ったほうが効率的。
Firebird SQLデータベース
  http://www.firebirdsql.org/
IBExpert
  http://www.ibexpert.net/ibe/
2012-08-02
 Webのサーバ側で動くプログラム。いわゆる CGIのプログラムを組むためには、最近ならPHP あるいは 昔からある Perl 。これらはスクリプト系の言語。ひと手間かかるコンパイル言語なら、Java や、C あたり。職業プログラマならば、用途に合わせた言語を使えなければ話にならないだろうけど、趣味でやってる人間は自由に選べる。僕も、C とか、Java とか使ってたはずなのに、さっぱり思い出せない。

 で、現実的に使えそうな言語が、Pascalぐらい。正確には Windowsで自前のツールとか作るのに使っている Delphi(オブジェクトPascal 風)で、使用暦だけは長い。ならば、CGI も Delphi で組めばよさそうなのだけど、根本的な問題としてプログラムが動作するのは、Windows上だけ。Windowsの Webサーバを用意するのは、OS そのものが有料なので、何かと割高になってしまう。

 そういうわけで、Linux にも対応(安いVPSで可)していて、現在も開発が続いている Free Pascal+Lazarus を使うことに。Lazarus は、Free Pascal コンパイラの受け渡しをするエディタ込みの開発環境、本来のポトペタでフォーム付のアプリを作成させるわけではなく、ブラウザ向けにテキストを吐き出すような、非ビジュアルなコンソールアプリを作る。

 ブログ・プログラムは、実はデータベースアプリ。書き込みは、データの追加だし、表示は、データの整形表示。プログラム的には、特別難しい題材ではないように思える。とりあえず、使い慣れた Firebird を選択。InterBase系は、Delphi と相性良かったので、Free Pascal でもいけるはず。

 Pascal + Firebird という、Webアプリとしては、超レアな組み合わせがステキ。
rdoz.blog
管理人の趣味ネタ
 Arduino、映画、メカニカル キーボード、
  プログラミング、レトゲー etc...

links
search

recent comments
categories