パソコンのこと日記

参考書に載っていないシステム開発の心得

1 Mins read

今まで色々な言語の参考書を読んできたが、肝心なことが書かれていないと思い、世の中に一言(笑)

開発者に一番重要で必要なスキルは、Log出力機能を付けることだ!
 
1番の狙いとしては不正エラーを捉えることが目的で、後はおまけで色々と適材適所に仕掛けて、ほしい情報を出力すればいい。

じっくりテストをしたとしても運用を開始して本番環境で、ほぼ必ずと言ってよいほど、簡単には分からないエラーが発生する。その際、確実に問題点を絞り出すことが非常に重要となるので、この為だけに仕掛けると言っても過言ではない。この機能があるとないとでは大違いである。

当たり前だが、プログラム内は目に見えない。Log出力してあれば見える形でユーザーに対し「これで大丈夫です」と説明する材料となり、自信を持って説明することが出来る。また説明する開発者もアタフタせずにすむ。(笑)

開発する場合は正常なルートを初めは作ってしまいがちだが、一番はじめにLog出力機能を考えて作成する。最近ではLog4など色々と言語にぶら下がっている出力機能もあるので自作しても良いし、既存のLogClassを使用しても良い。

機能としては、出力機能、出力停止機能、出力先変更機能は最低ほしい。フラグやPathは定数をきっておいても良い。

最低限ほしい出力内容は日時、どこから出力されたか、ステータスはエラーなのかログなのかの切り分け情報、内容と四つはおさえてほしい。もちろんそのシステムにより、必要な情報は出力する。Web系アプリならマルチスレッドでの動作な使用ユーザー情報(IDなど)も必要で可能であればDBへ出力してもいい。

このDBへの書き込みはDB接続を前提としているので接続自体に問題が発生した時に捉えられないことがあるので、基本はローカルにログを吐いて、DB接続が確認できたらDBへも吐き出させるのが有効。(毎日夜中の1時になど)

DB出力は注意が必要で、プログラムエラーのログを吐こうとしたらDB接続エラーとなることが考えられる。エラーのエラーは本末転倒になる。DB出力は十二分に確認が必要。またシステム負荷の度合をみながら設置すること。

■Logを出力するタイミング
・エラー時
・単体起動時、単体終了時
・重要な箇所(DB更新など)

言語に存在し、余裕があればThrow系と連携をとると最適になる。

本当に硬いシステムの中身はLog出力機能が充実しているものであり、不安定なシステムにはLog機能が充実していないことが多い。

これが出来て一人前?・・・当たり前(苦笑)

Related posts
日記

Swagger EditerをDockerでローカル起動

1 Mins read

swagger

API開発で設計したDocment管理として使用できサンプルコードとしてJSONにしてくれて、よしなにPostmanみたいな動きしてくれるやつ

最近現場で使っているところが増えてる

ローカルでサーバー起動(例は3つ、外部APIサーバーが3つある場合などなど)

docker pull swaggerapi/swagger-editor
docker run -d -p 8090:8080 swaggerapi/swagger-editor
docker run -d -p 8091:8080 swaggerapi/swagger-editor
docker run -d -p 8092:8080 swaggerapi/swagger-editor

http://localhost:8090 などをブラウザで開き

ソース管理と一緒にリポジトリ内などにあるyamlファイル内容をコピペでブラウザ左Windowへ貼り付け

get、postなどテストをおこなう

※APIなので多少仕様の理解が必要となる

よく一緒に使われるのが OpenAPI

こちらはAPI設計ファイルとなったyamlファイルを読み込ませることにより指定した言語としてI/O部分のソースコードを自動でジェネレートしてくれるツール、ただし良いところばかりではなく、間違ったソースもジェネレートしてくるから地雷除去が必要な場面に出くわすこと多い

 

 

日記

AlmaLinux 8 GPG キー変更の準備をする

1 Mins read

dnfコマンドでエラー

dnf update

AlmaLinux 8 - BaseOS 485 kB/s | 3.4 kB 00:00 
GPG 鍵 0xC21AD6EA をインポート中: 
Userid : "AlmaLinux <packager@almalinux.org>" 
Fingerprint: E53C F5EF 91CE B0AD 1812 ECB8 51D6 647E C21A D6EA 
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux 
これでよろしいですか? [y/N]: y 
鍵のインポートに成功しました 
鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?

キーが新しくなった

AlmaLinux 8 GPG キーの変更

2024 年 1 月 12 日に、更新された GPG キーを使用して AlmaLinux 8 の RPM パッケージとリポデータへの署名を開始します。以下の手順を実行すると、切り替え後も引き続き問題なくアップデートを受信できるようになります。

システムに新しい AlmaLinux 8 GPG キーが既に含まれており、それを信頼していることを確認したい場合は、それをインポートするだけです。

sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
日記

MongoDB、Mongo Expressの環境をDockerで立ち上げる(docker-compose)

1 Mins read

ブラウザから

http://localhost:8081

ME_CONFIG_MONGODB_ADMINUSERNAME: root 
ME_CONFIG_MONGODB_ADMINPASSWORD: password

で指定したID,Passをブラウザへ入れてもログインできない?はて?

ブラウザのBasic認証用ID,Passの環境変数追加設定が必要だったらしい

ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: password

「docker-compose.yml」ファイル作成(下のコード)
「docker-compose up -d」コマンドをターミナルで実行


version: '3.1'

services:

  mongo:
    container_name: mongo-dev
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - ./configdb:/data/configdb
      - mongoDataStore:/data/db

  mongo-express:
    container_name: mongo-express
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
      ME_CONFIG_MONGODB_URL: mongodb://root:password@mongo:27017/
      ME_CONFIG_BASICAUTH_USERNAME: admin
      ME_CONFIG_BASICAUTH_PASSWORD: password

volumes:
  mongoDataStore:
    driver: local

Mac ターミナルからも接続確認(testDBはexpressからなどcreateしておくこと)

mongosh "mongodb://root:password@localhost:27017/testDB?authSource=admin"

Current Mongosh Log ID: 65be609e7384r68762b10b0
チームを強化する

サービスの
サブスクリプションの利点を説明するテキストを追加します。