Edited at

インスパイヤされて掲示板を作りたくなった(番外篇2)

More than 3 years have passed since last update.

あっぷっぷ…

(この記事は前回更新のあと半年もさぼったあと再開したいなと思って書いたよ)


過去ログ

スレ
内容

インスパイヤされて掲示板を作りたくなった(1)
PHPとComposer、あとべんりなライブラリ

インスパイヤされて掲示板を作りたくなった(2)
SQLite3のスキーマ設計とTwigテンプレート

インスパイヤされて掲示板を作りたくなった(3)
ルーティングとモデルの説明

インスパイヤされて掲示板を作りたくなった(4)
ドキュメント生成とモデル、SQL

インスパイヤされて掲示板を作りたくなった(番外篇)
PsySHでアプリケーションと対話する

インスパイヤされて掲示板を作りたくなった(番外篇2)
← イマココ


半年ぶりにアプリを更新する

作りはじめて時間も経てば、依存パッケージの更新も重なっていきます。機能追加されてることもあれば、パフォーマンス改善、セキュリティフィックスなど理由はさまざまです。

依存してるパッケージの更新情報を一覧するにはcomposer outdatedを利用します。

% composer outdated --no-interaction --no-ansi 

filp/whoops 2.0.0 2.1.3 php error handling for cool ...
justinrainbow/json-schema 1.6.1 3.0.1 A library to validate a json...
kdyby/events v2.4.0 v3.0.2 Events for Nette Framework
latte/latte v2.3.4 v2.4.1 Latte: the amazing template ...
nette/application v2.3.11 v2.4.1 Nette Application MVC Component
nette/bootstrap v2.3.4 v2.4.1 Nette Bootstrap
nette/caching v2.4.4 v2.5.1 Nette Caching Component
nette/component-model v2.2.4 v2.3.0 Nette Component Model
nette/di v2.3.9 v2.4.2 Nette Dependency Injection C...
nette/finder v2.3.2 v2.4.0 Nette Finder: Files Searching
nette/http v2.3.4 v2.4.0 Nette HTTP Component
nette/mail v2.3.4 v2.4.1 Nette Mail: Sending E-mails
nette/neon v2.3.4 v2.4.0 Nette NEON: parser & generat...
nette/php-generator v2.3.5 v2.4.1 Nette PHP Generator
nette/reflection v2.3.1 v2.4.0 Nette PHP Reflection Component
nette/robot-loader v2.3.1 v2.4.0 Nette RobotLoader: comfortab...
nette/safe-stream v2.3.1 v2.3.2 Nette SafeStream: Atomic Ope...
nette/security v2.3.1 v2.4.0 Nette Security: Access Contr...
nette/utils v2.3.7 v2.4.0 Nette Utility Classes
nikic/php-parser v1.3.0 v2.1.0 A PHP parser written in PHP
phpunit/php-timer 1.0.7 1.0.8 Utility class for timing
psy/psysh v0.7.0 v0.7.2 An interactive shell for mod...
symfony/console v2.8.2 v3.1.3 Symfony Console Component
symfony/options-resolver v2.6.13 v3.1.3 Symfony OptionsResolver Comp...
symfony/polyfill-mbstring v1.1.0 v1.2.0 Symfony polyfill for the Mbs...
symfony/var-dumper v3.0.2 v3.1.3 Symfony mechanism for explor...
symfony/yaml v2.8.2 v3.1.3 Symfony Yaml Component
tracy/tracy v2.3.9 v2.4.2 Tracy: useful PHP debugger
twig/twig v1.24.0 v1.24.1 Twig, the flexible, fast, an...
vlucas/phpdotenv v2.2.0 v2.3.0 Loads environment variables ...
zonuexe/tetosql 0.0.1 0.0.3 Simple and secure SQL templa...

Compilation finished at Sun Aug 28 02:09:48

おお、たまっとるたまっとる。みんながんばっとるな。

このうち、自分でcomposer.jsonに書いた覚えのないものについては、放っておきます。更新を無視するとまづそうなら、upstreamにPRを送ります。

さて、バージョンアップの方針を立てるには、「セマンティックバージョニング(semver)」の概念を知る必要があります。これは、「わかりやすいバージョン番号をつけようね」といふ指針のひとつです。

セマンティック バージョニング 2.0.0 - Semantic Versioningより引用します。


バージョンナンバーは、メジャー.マイナー.パッチとし、バージョンを上げるには、


  1. APIの変更に互換性のない場合はメジャーバージョンを、

  2. 後方互換性があり機能性を追加した場合はマイナーバージョンを、

  3. 後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。

プレリリースやビルドナンバーなどのラベルに関しては、メジャー.マイナー.パッチの形式を拡張する形で利用することができます。


「後方互換性」とは、更新に伴って利用側の変更なしでそのまま利用できる性質のことです。メソッドの引数変更、クラス名変更などがあった場合はメジャーバージョンが上がります。

次にバージョン記法についてです。こちらの意味についてはVersions - Composerに定義があります。

>=1.2.3~1.2.3^1.2.3などの似た意味の演算子がありますが、以下の表のような差があります。

演算子
意味

>=1.2.3
(1.2.3以上すべて)

~1.2.3
>=1.2.3 <1.3.0

^1.2.3
>=1.2.3 <2.0.0

ここは半年の間にちょっと悩んで、まだ結論が出てないのですがアプリケーションそのものに影響するライブラリであるrequire~1.2.3方式で慎重に、require-dev^1.2方式でざっくりとアップデートしていくのがべんりかなと感じてます。

ので、この方針に従って更新してみる。


composer.json.diff

diff --git a/composer.json b/composer.json

index 90b2b29..9e370a2 100644
--- a/composer.json
+++ b/composer.json
@@ -11,17 +11,17 @@
}
},
"require": {
- "vlucas/phpdotenv": "^2.2",
- "twig/twig": "^1.24",
- "twig/extensions": "^1.3",
- "zonuexe/simple-routing": "^0.5.0",
- "zonuexe/objectsystem": "^0.5.3",
- "zonuexe/tetosql": "^0.0.1",
- "apigen/apigen": "^4.1"
+ "vlucas/phpdotenv": "~2.3.0",
+ "twig/twig": "~1.24.1",
+ "twig/extensions": "~1.3.0",
+ "zonuexe/simple-routing": "~0.5.0",
+ "zonuexe/objectsystem": "~0.5.3",
+ "zonuexe/tetosql": "~0.0.3"
},
"require-dev": {
"filp/whoops": "^2.0",
- "psy/psysh": "^0.7.0"
+ "psy/psysh": "^0.7",
+ "apigen/apigen": "^4.1"
},
"scripts": {
"doc": "apigen generate"

この変更をした状態でcomposer updateコマンドを利用するとcomposer.lockも更新されます。

composer.lockを含めた差分patch

あとはこれで動けば、だいたい良さそうな感じがしますね。本当はユニットテストがあれば問題なく動作することを確認できるのですが、今回は省略します。。。


あとがき

みなさんはとっくに掲示板を動かしてる頃だと思ふので、僕も早く追ひつきたい… 三三三ヾ(〃><)ノ゙