5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

カテゴリー: オープンソース

  • Bitbucketの有料プランのユーザー数を勘違いしていた話し

    現在、AtlassianのBitbucketのスタンダートプランに契約しています。最近Atlassianからの請求が、$3だったのに$15の請求と高くなっていました。

    よくプランの説明ページを読んでみると、Bitbucketのユーザー数で勘違いしていました。

    ユーザー数が無制限と思っていたら、リポジトリに追加できるユーザーが無制限だったみたいです。所有するリポジトリにユーザーの登録を追加すると、追加されたユーザーごとに3ドルかかるようです。(これで本当に合っている?)

    現在利用しているBitbucketは自分以外に、ただ同じプロジェクトだけの別の会社の4人にアカウントを追加してあげています。今までプロジェクトの開発の過程で、ファイルを書き換えたとか、先祖返りしたとかのトラブルがあったので、だったら今こちらで使っているBitbucketのリポジトリでソースを管理しましょう、という提案をして、こちらのBitbucketのレポジトリを公開したのでした。このときはリポジトリの利用で金銭は発生させていません。

    しかし、今回Bitbucketの請求が5倍になって何とかしなければいけません。その分を請求できるわけでもないので問題です。そもそも、Bitbucketのスタンダートプランにしたのは、プロジェクトにPDFファイルとか画像ファイルが大きくて、LFSのサイズが大きくなって無料プランではまかないきれなかったのが理由でした。

    結局は、自分のところでGitLabのサーバーをDockerで立てて対応しました。再度、別の会社の人たちにGitLabから招待して登録してもらいました。バージョン管理以外の課題管理とかの機能は使っていないので、今回のGitLabでも十分でした。

    でも、Bitbucketの課金ですが、自分が所有するリポジトリの登録している他のユーザー分課金するのですが、他のユーザーがBitbucketでレポジトリに登録したら課金されるとなりますので二重取りになってしまいます。この辺りが、Bitbucketの納得できない課金方法なのでした。

    とこの記事を投稿したら、昔に同じことを書いてあった。そう言えば、チームアカウントてどうやって登録するのだっけ?

    追記

  • WordPressのGutenbergは悪くないと思うけどなという話し

    このサイトではWordpressを使ってサービスしている。記事はGutenberg(グーテンベルク)というWordpressの新しいエディタを使って書いている。GutenbergはWordpressの大きなバージョンアプでサポートされたメインとなるブロックエディタである。

    どうもWordpress界隈では使いにくいとかで、Gutenbergの評判はよろしくない。Googleさんに聞けば、以前のGUIエディタに戻して使うと記事がたくさん出てくる。Gutenbergをディスるというのは、尖ったWordpressのユーザーの証しとなるかもしれしない(ウソ)。

    私からすれば、Gutenbergは使いにくいどころか、前のGUIエディタに比べて、記事を書くのには楽になったし、ブロックというのはわかりやすいと思っている。下のようなAmazonのアソシエイトのHTMLコードを含んだ三つ並びのカラムブロックとなんて楽チンで使いやすいと思うけど、自分はおかしいのだろうか?

    まあ、私は時間を少しかければ環境に慣れていくという特性があるので、そのせいかもしれないけど。

    Gutenbergがリリースした当初は、いろいろと致命的なトラブルがあってあえて使わなかった時期があったけど、現在は安定しているので使用には心配はない。

    PCに詳しくない人からは、Wordpressはバージョンアップのたびに使い勝手が変わるので嫌だとか言わたけど、自分は慣れの問題だし、画面が新しくなってもどうにか想像して使えるから、バージョンアップに関してはあまり気にしていない。以前あった機能が、どこかに言ってしまって困ることがたまにあるけど。例えば、編集したページへのリンクは、上のメニューにあったが、文章メニューの中のパーマリンクに移動したのに気が付くのに時間がかかったとか・・・・。

    Gutenbergがイヤだという人は、記事編集がブロックという考え方に変わってしまったのに付いていけなかったのだろうか。私にとってはブロックで編集するというのは、すんなり入っていけたのはラッキーだったかもしれない。あとは新しいものへの拒否反応なのかな。

    という訳で、今回ようやくWordpressのサイトテーマもグーテンベルクに最適なTwenty Twentyに変更した。今回は、Twenty Twentyのテーマをほぼそのまま使っている。

    変更点としては色、をイメージカラーに変更したことと、見出しの文字の大きさをモバイルでは大きすぎたので小さくしたこと、あとはフッタの配置がいい加減であったのできれいに整列した。変更はすべてCSSの追加の範疇で行っている。その他は今まで使っていた広告プラグインが動かなくなったので、別のプラグインにしたことである。ただし、この広告プラグインは、思ったところに挿入できないという使いにくいところがあるから、別のプラグインを探すつもり。

    以上の変更で約2時間の作業であった。

    テーマを変更してトップページのアクセス数が急激に4倍ほど増えたけど、これはテストのアクセスもカウントされたのだろうか。

    続きはこちらから

  • QNAPにsudoをインストールした話し

    QNAP(TS-673)にsudoをインストールしてみた。sudoをインストールしておけば、コンソールからadminで入らなくてもいろいろできる。最近、ようやくQNAPにDockerのコンテナで、サーバーを立てて、ずっと使っているさくらインターネットのVPSを移行している。

    上の記事のようにあらかた移行できたけど、残りはWebのサイトの更新作業で使用するためのテストサーバーを移行するだけとなった。DockerのコンテナでApacheをインストールしただけで動いていることは動いているのだけど、更新をどうするか? ネットワークドラブで更新するのでもいいのだけど、外部からの更新もできるように、sshでscpでファイルを更新したい。しかし、QNAPで最初からサポートしているsshサーバーは、ポート番号の変更くらいしかできなそう。何とか公開キーでの認証をできるようにしたが、パスワード認証を禁止することができない。/etc/ssh/sshd_configをどうもQNAPが起動するたびに書き換えてしまうようである。SSHの設定は、この辺で中断して、先にsudoを使えるようにしておく。

    ここから本題である。

    QNAPにsudoをインストールする情報は、いろいろなサイトで書かれているが、QNAPのファームウェアのバージョン(ちなみに現在は4.4.2.1310 Build 20200519が入っている)によって方法が違うみたい。とりあえず、今使っているQNAPで動いた結果をメモとして残しておく。

    • QPKG Storeのアプリリポジトリを追加してEntware-stdをインストールする。
    • opkg install sudo でsudoをインストール。qpkgではないopkgコマンドであるのに注意。
    • 設定追加はvisudo をしてもダメ。/usr/etc/sudoers を直接編集すること。
      vi /usr/etc/sudoer

    これでターミナルからの設定が捗りそう。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

  • PlantUMLのアクティビティ図でrepeatのbackwardキーワードと動線が正常に出力されない話し

    今やっている業務の作業フローがこんがらがってきたので、整理しようと思って図に書き出してみた。この際、きれいに出力しようと思った。

    最初はInkSpaceで一から書いていこうとしたが、箱を3つ書いたみたところでめげた。次にやったのは、VS Codeの拡張機能で動くPlantUMLのアクティビティ図である。PlantUMLはInkSpaceやIllustrator、Visio、LibreOfficeのDrawのようなドローアプリケーションで図を描く必要もなく、テキストで描いていけば自動的にアクティビティ図(それ以外のUMLの図でも)を描いてくれる優れものである。

    PlantUMLのアクティビティ図には動線の機能があるので、自分とお客さんの役割を分担した上での業務フロー図が描けそうなので早速描いてみた。動線とはこのような図である。PlantUMLのサイトからの抜粋である。

    これをPlantUMLのアクティビティ図のコードではこんな感じである。

    @startuml
    |Swimlane1|
    start
    :foo1;
    |#AntiqueWhite|Swimlane2|
    :foo2;
    :foo3;
    |Swimlane1|
    :foo4;
    |Swimlane2|
    :foo5;
    stop
    @enduml

    これは簡単と、このまま進めていったら、問題が発生。フローを戻したりが自由にできないのでした。

    PlantUMLではシーケンス(順序)、判断(IF)、前後判定の繰り返し(repeat)くらいの昔流行ったgoto文を廃止した構造化プログラミング(例外的にgoto文は残っているけど)のプログラム制御しか用意されていない。今回は、例えば、処理後に判定してNGだったら、何かしらの処理をしてから、また元の処理に戻すなんてことをやりたい。これを考えてみると、後判定の繰り返しで、判定でOKになるまで繰り返す。繰り返す前にNGのメール送信処理を実行したい。これは判定後の処理で書いてみるとこのような感じになる。

    @startuml
    start
    
    repeat
      :何かの処理;
      backward:処理NGメール;
    repeat while (処理判定?)
    :処理OKメール;
    stop;
    @enduml

    出力されたアクティビティ図はこのような図になる。

    次に担当Aと担当Bに役割を振り分けるように動線で表現してみる。処理は担当Bが行って、その処理が正しく行われたかの判定とその結果のメール送信は担当Aとなる。担当BはNGメールが来たら再度何かの処理を行う。

    @startuml
    |A|
    start
    |B|
    repeat
      :何かの処理;
      |A|
      backward:処理NGメール;
    repeat while (処理判定?)
    :処理OKメール;
    stop;
    @enduml

    これを出力したアクティビティ図はぐちゃぐちゃになる。PlantUMLのサイトにあるライブプレビューでも同じ結果である。ライブラリは一緒なのかな?

    まあ、このようはフローはアクティビティ図からいうと変則的な図だと思うからPlantUMLではサポート外である。何かいい書き方があるのかな?

    仕方ないので、SVGファイルに一旦出力して、出力したSVGファイルをInkSpaceで開いて手で修正した。

    でも、このような処理を通常のプログラミングでどうやっているか考えてみると、処理を無限ループで回して最後に判定し、OKならbreakで無限ループから抜け出している。PlantUMLではbreakが書けないしな。

    そもそもPlantUMLのアクティビティ図の書き方は新しく変わったみたい。いまだベータ版となっている。昔と比べてだいぶメンテナンスしやすくなったみたい。ただし、いろいろと制約が増えてしまったようでもあるらしい。

    著:株式会社フルネス 尾崎惇史
    ¥2,587 (2025/04/01 14:32時点 | Amazon調べ)
    著:竹政 昭利, 著:林田 幸司, 著:大西 洋平, 著:三村 次朗, 著:藤本 陽啓, 著:伊藤 宏幸
    ¥3,191 (2025/04/01 14:32時点 | Amazon調べ)

    追記

    PlantUMLのフォーラムを覗いていたら、どうやらループでbreakができるらしい。ドキュメントに載っていない。新しい構文らしい。

    こんなコードを書くと、

    @startuml
    start
    
    while()
      :何かの処理;
     
      if (処理OK?) then (yes)
        break
      else (no)
       :処理NGメール;
      endif
    
    endwhile
    :処理OKメール;
    
    stop;
    @enduml

    こんなアクティビティ図が出力される。

    これに動線をつけてみると、

    @startuml
    |a|
    |b|
    
    |a|
    start
    
    |b|
    while()
    
      :何かの処理;
     
      |a|
      if (処理OK?) then (yes)
        break
      else (no)
        :処理NGメール;
      endif
    
    endwhile
    
    :処理OKメール;
    
    stop;
    @enduml

    このような惜しい感じになる。もう一歩足りない。

    やはり、動線はまだ上手く動いていないのか? それとも正しい書き方があるのかな? だったら、教えて欲しいわ。

  • RedmineとBitbucket(Gitレポジトリ)を連携させた話し

    仕事で使用しているRedmine(一人チケット管理だけど)とBitbucketのレポジトリとの連携の設定をしてみます。やってみると、つまづいた点がありましたので、メモとして残しておきます。

    参考にしたのは以下のサイトです。

    Redmineのブログサイトです。

    Redmineの公式サイトです。

    今回行った手順を簡単に説明すると以下の通りです。コマンドなどの詳細の手順は各サイトをご覧ください。

    1. Redmineにredmine_github_hookプラグインをインストールする。
    2. RedmineのサーバーにBitbucketリポジトリからmirrorリポジトリでcloneしておく。そのときgit remoteは、後で認証が面倒になるのでhttpsではなくsshで指定しておく。cloneはredmineのアカウントで行う。
    3. Bitbucketリポジトリからfetchできるように、Redmineのサーバーでredmineのアカウントでssh-genkeyでパスワード無しで公開キー、秘密キーを作成する。公開キーをBitbucketに登録しておく。実際にfetchできるかテストしておく。
    4. Redmineでリポジトリの設定をする。設定はRedmine全体の設定とプロジェクト個別のリポジトリの設定がある。設定できたらプロジェクトのリポジトリが参照できるか見てみる。サイトが今どきUTF-8ではなくシフトJISだからリビジョンの差分が文字化けしてしまうので、全体の設定-ファイル(どういう訳かリポジトリではない)で、添付ファイルとリポジトリのエンコーディングをutf-8,cp932,euc-jpに設定しなければいけない。差分を表示をインラインにすると文字化けするが、横に並べるにすると正常に表示される(これは不明)。また、リポジトリが大きいとプロジェクトのリポジトリのページはInternal Errorになるが、しばらくすれば参照できる(これで最初諦めかけた・・・)。
    5. BitbucketのリポジトリのWebhooksの設定をして、commitするとredmineのレポジトリが更新されるようにしておく。何かcommitしてBitbucketにpushすると、Redmineのレポジトリが更新されるかを確認する。
    6. 連携する前のRedmineの各チケットとリビジョンと関連付けを行う。

    以上は各サイトの内容をいいどころ取りしたものです。それぞれ自分のサイトに合わせて設定してください。

    以上ですと、Redmineからレポジトリを参照できるだけですので、BitbucketとSourceTreeでも使いやすいようにRedmineの連携も設定します。

    BitbucketからRedmineのチケットIDとリンクするには、リポジトリの設定のリンクで

    Link URL: https://[redmineのドメイン]/issues/\1
    Link Key : #(\d+)

    とします。これでBitbucketページ内で#チケット番号をクリックすれば、Redmineの該当する番号のチケットページが表示します。

    同様にSourceTreeの設定-詳細で、コミットメッセージ中のリンクで

    置換タイプ : その他
    正規表現 : (\d+)
    リンク先 URL : https://[redmineのドメイン]/issues/$1

    と設定すると、コミット内のメッセージに出てくる#チケットIDをクリックすれば、Redmineの該当する番号のチケットページが表示できるようになります。

    実現できなかったことは、Redmine内のレポジトリのハッシュからBitbucketのコミットにリンクの方法でした。何かよりRedmineのブラグインがあるのでしょうか?

    著:湊川あい, 著:DQNEO
    ¥2,208 (2025/04/01 17:15時点 | Amazon調べ)
    著:リック・ウマリ, 翻訳:吉川邦夫
    ¥3,247 (2025/04/01 17:15時点 | Amazon調べ)

    追記(2020年5月7日)

    RedmineとSourceTreeの連携ですが、以上はWindowsの設定方法です。Macの場合は違います。リンク先ではなく置換される文字列となりますので、HTMLのリンクとなります。例えば、以下のようになります。

    正規表現パターン : #(\d+)
    と置き換えます : <a href="https://[redmineのドメイン]/issues/$1">#$1</a>

    ただし、自分のところではブラウザが起動せずに、そのままのビューでRedmineになってしまいます。何かまだ問題がありそうです。

    追記(2020年9月30日)

    あれからBitBucketをやめて、QNAPのContainer StationにGitLabをコンテナで立てました。上記の記事中のgit remoteは、sshではなくHTTPSでアクセスさせています。

    QNAPのファームウェアをアップデートして再起動したら、RedmineとGitLabの連携がうまくいかなくなりました。

    いろいろと調べてみると、Redmineからgit pullができていませんでした。原因は、GitLabのコンテナのIPアドレスが違うアドレスになっていて、RedmineからGitLabのコンテナにアクセスできなくなっていたのが原因でした。たまたま今までQNAPを再起動してもGitLabのコンテナのIPアドレスが変わらなかったようでした。まあ、考えてみると当たり前です。~/.ssh/configで直接IPアドレスを指定していたのが敗因でした。

    そこで、~/.ssh/configを

    Host gitlab                                                                                                                                                                                       
      Hostname gitlab_web_1     # アクセスできるホスト名                                                                                                                                                                      
      # Hostname 172.29.0.3    直接IPアドレスをしているのはやめる。                                                                                                                                                                       
      IdentityFile ~/.ssh/id_rsa                                                                                                                                                             
      User git 

    のようにコンテナのホスト名に変更しておきました。これで、GitLabのコンテナを再起動しても大丈夫のはずです。git remoteのほうは、

    $ git remote -v                                                                                                                           
    origin  git@gitlab:user-name/xxx.git (fetch)                                                                                                                                                      
    origin  git@gitlab:user-name/xxx.git (push)   

    のようにしています。

    ちなみにRedmineとGitLabのコンテナは同じネットワークに存在してます。これが重要でう。

    追記(2021年7月7日)

    BitbucketからGitlabに移行したけど、設定方法は基本的に同じです。

    Redmineのサーバーでredmineアカウントで公開キー/秘密キーを作成してGitlabのサーバーに公開キーを登録しないといけないということを忘れて手こずりました。

  • CandyCaneをRedmineに移行した。だけどデータ移行なんて考えないで移行したという話し。

    こちらの話しの続き。

    現在作業記録をCandyCaneで行っている。CandyCaneは元々Redmineの機能をPHPで記述するということで始まったプロジェクトである。現在は、ほぼ開発は停止している。

    CandyCaneはPHP5.6の上で動かしているので、PHP自体アップデートはない。新しくPHP7の上で動かそうにも難しい。実際にDockerのコンテナでPHP7のサーバーを起動してCandyCaneを動かしたが諦めた。この際、CandyCaneを捨ててしまおうと考えた。

    つぎのバグトラッキングシステムを何にしようかいろいろ検討したが、チケットごとに時間での工数記録してお客さんに報告をしなければいけないので(これが一番大事)、結局はCandyCaneの大元のRedmineに落ち着いた。操作もあまり変わらないし。

    最初はCandyCaneからRedmineにデータの移行をしようと考えたが、これは大変だったのでやめた。今月からCandyCaneの使用をやめてきっぱりRedmineでチケット管理をやっていく。チケット番号(issue ID)の重複をさけるため、チケット番号はGitでも管理しているので、チケット番号を途中まで採番しておく。これはissuesテーブルのidのオートインクリメントを設定し直すだけ。

    CandyCaneは古いPHPが動くようにQNAPの中にDockerのコンテナを立てて、CandyCaneのファイルとデータベースをそのまま移行するくらいで問題無かった。

    最後に利用しているお客さんにCandyCaneからRedmineに変わったというアナウンスと、Redmineのアカウントを発行すれば完了。

    しかしながら、CandyCaneを使い始めて11年経っていた。チケットは約3,000近く溜まっている。トラブルなくここまで無事に動いてくれた。ご苦労様でした。

    SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。

  • Open Source Conference 2020 Online/Springにオンラインで参加してみた話し

    今日と昨日とOSCにオンラインで参加しています。今話題になっているZoomで接続しています。今回初めてZoomを使いました。何か楽しいですね。

    初めてオンラインのセミナーに参加しました。参加してみたかんそうとしては意外とオンラインもありです。新型コロナウイルスの騒ぎが落ち着いても、オンラインのセミナーも引き続き開催されるのでしょうね。

    自分みたいな出不精からすると(東京会場の明星大学は遠いのよね)、オンラインのセミナーはありがたいです。蜜に握手して交流するわけではないし、どこかの会社の新人研修のように名刺交換が目的で名刺をあるめているわけではないし、オンラインでも質問できるし、あまり変わりリアルのセミナーと変わりないような気がします。今後は反対にリアルを売りにセミナーを開催するようになるかもしれないな。

    それよりもたまに接触が悪いのか音が途切れるからチャンとしたヘッドセットを手に入れよう。と思ったら、ヘッドセットって品薄なのね。

  • Tera Stationのディスク交換をした話し

    ツレからメールが読めなくなったと報告があった。メールはローカルのLinuxサーバーにIMAPを立ててレンタルサーバーのメールを取り込んでいる。このLinuxサーバーにはiSCSIでTeraStarionに接続してディスクをマウントしている構成である。

    Linuxサーバーにログインしようとするとエラーになっていたのでおかしいなと思ったら、TeraStarionに警告が表示されている。ディスク1に障害が発生したそうな。

    ここで冷静に慌てず騒がず(これ大事)ディスクの交換を行う。こんなことがあると思って、以前に交換用のディスクを購入しておいた。まずはディスクを交換してしまう。

    ディスクを交換しただけではRAIDの再構築をしてくれないらしい。TeraStarionの管理画面に入って(パスワードを忘れて焦った)再構築の指示を出す。こちらの作業は慎重に。参考にしたのは以下のバッファローのサイト。こちらはTeraStarionのISだから、若干画面と操作は違っている。

    あとは再構築が完了するまで待つだけ。待つだけだと思う・・・・。

    まだまだ終わる気配がない。

    もうこのTeraStarionは12年目だがら、よくも持ち堪えてくれた。しかも、ディスクの交換は今回が初めてである。このTeraStarionは大当たりだったかもしれない。それにしても写真で見ると埃だらけ。これでも頑張って動いてくれたのね。

    すべてRAIDの再構築が無事に終わったら、TeraStarionには引退していただいて最近買ったQNAPに移行しよう。

    追記

    無事にRAIDの再構築が終わった。6時間ほどかかった。

    だけど、12年目のNASサーバーがよくぞ復活してくれた。本当にこのTeraStarionは大当たりを引いた。

    これに満足せずに、サーバーの移行をやろう。

  • OCNモバイルOneの新サービスはVPNで接続できるの? という話し

    思いつきでOCNモバイルOneの新サービスに申し込んでみたけど、よく考えるとグローバルのIPアドレスを割り当ててくれるのかしら? 現在のOCNモバイルはグローバルのIPアドレスを割り当ててくれる。

    まさか一般のモバイルの事業者のようにシェアードアドレスになっているなんてないよね? 可能性は大きそうだな。

    もし、シェアードアドレスだったら、モバイルでVPNで接続でないことになる。何かいい方法を考えなければいけない。OCNはすんなり接続できていたので、面倒なことになりそう。

    著:戸根 勤
    ¥2,376 (2025/03/31 10:59時点 | Amazon調べ)
    著:Gene
    ¥1,663 (2025/04/03 22:12時点 | Amazon調べ)
  • WordPressのサイトで「サイトで技術的な問題が発生しています。」が出た話し

    あるお客さんのサイトで、表示がおかしくなった。CSSを読み込まれてしないようだ。HTMLファルだけを表示しようとしている。別のテーマを適用しても変わらない。

    WordPressの管理ページで「外観」ー「カスタマイズ」を選択すると、

    サイトで技術的な問題が発生しています。サイト管理者のメールを確認して指示に従ってください。

    となる。テーマのファイルがおかしくなったと言うよりも、Wordpressのサイトがおかしくなったみたい。そういうときはWordpressのトラブル解決の定石としてプラグインを外していく。

    プラグインの一覧をみると、Head Cleanerというそれらしいプラグインがインストールされている。まずはHead Cleanerを外してみる。

    一発で大当たり。Head Cleanerを外したら、正常にデザインされたページが表示された。Header Cleanerの最終更新は3年前だから、既にプラグインとしてはお亡くなりになっていると言うことなのかな?

    とりあえずこれで行く。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。