設計思想強めの業務WEBアプリを作成したい

まず初めに...

業務WEBアプリって設計思想気持ち悪くないですか?

例えば、ki〇toneはWEB DBサービスと謳っている割には、参照元データ更新時に参照先データが更新されないという設計。確かに参照先データにおいて履歴という観点で見れば自動更新して欲しくないケースはあるものの、参照先データを修正ボタンを押下し、何も修正せず更新ボタンを押下したら更新後の参照元データに参照先データが更新される。(????)どういう思想????変えないなら明示的に参照先データ更新ボタンを用意して手動更新させろよ。。。という感じがあったり。

正直使い勝手は悪く、サービス内容が過多である、ということが多い。

 

本心で言えばエンジニアで働いていた際に一番心に留めておいたことは「システム開発ではまず、作らないで業務改善できるかを検討する。基本は作らないが正解。そもそも効率化を掲げているシステム設計で、システムを作成するということはシステムを使用するということであり、他の作業を排除しているものの、そのシステムを使用する手間を追加している時点で非効率であるジレンマ」ということである。

長くいっているものの、良いシステムというのは確信をついた機能の少ないシステムである。というかアジャイル開発が主流になっているのに、そこまで必要のない機能を最初に組み込む必要ってなくない??

 

そこで今回は元エンジニアとして、自社のWEBアプリを自作すると共に、思想設計を明確にしたWEBアプリを作成していこうと思い、記事にする。

また自分への備忘録としての意味合いが強いので、語尾やニュアンスが適当な場合はあるが、そこはご承知ください。

 

設計思想

上で言った通り、設計思想を考える。ここではざっくりとした設計思想を記載する。

  • 機能追加が用意であること(拡張性)
    アジャイル的にアップデートするなら必須
  • データ保持はすべてファイル形式、RDBを使用しない。RDBを使用しない理由は別途記載する。
  • 履歴データは可能な限り保存したい
  • ユーザー使用感とシステム内容は近似していなくていい

 

RDBを使用しない理由

RDBを使用しない理由は、昨今のクラウド化にある。実際のところ、AWSであればRedshift等のRDBサービスはあるものの、値段や拡張性よりS3を使用するケースは増えている。

特にデータ分析用途である場合は、データ形式RDBでは対応できない形式もあり、DWHツールであるSnowflakeなど、なういサービスはS3にデータ保管していたり、ファイルシステム側に流れている。

またファイルシステムの利点はユーザー視点にあること。正直RDBの方が使いやすいし、SQL大好きなので使用したい気持ちはわかるものの、ユーザーにとってはRDBというだけで嫌悪感を抱く人は多い。

大手企業の優秀な方はそうでない場合が多いだろうし、既存サービスを使用するのはいいものの、中小の高齢者が多い企業は正直難しい。それこそExcelを方眼紙のように使用する人らにとってRDBは難題である。

結局サービスを使用する人はサービスを作る人ではないので、ユーザーの使用感は絶対である。というかRDBうまく使用できる人ならロジカルシンキングExcelで基本なんでもできるでしょ。マクロすごいよほんと。

あと理由としては薄いけど、csvやxlsxってExcelやん?Excelって基本代替サービスないやん?RDBってPastgresとかSQLiteとか複数あるやん?ぶっちゃけ移行作業も発生しないし、実質Excelのバージョンアップのみだし、そこまでエラーの吐くアプデやらないからめっちゃ効率的だよね、って話。

 

次回は環境構築編です

この行数の多いコードに少しだけ便利なloggingを!

この行数に多いコードに少しだけ便利なloggingを!

今回実施したこと

pythonにて、ログレベルとファイル名を指定することで、

任意のログレベルに対応し、ログファイルにも記載してくれるコードを作成、関数化した。

なお、ログ設定にはyaml形式を採用した。

 

コード

まずはコード全行を記載。

>|python3|
# import 
import yaml
from logging import config, getLogger

def my_logger(level = 'DEBUG', filename = None):
logger = getLogger(__name__)

# set config by yaml
conf = """
version: 1
formatters:
default:
format: '%(asctime)s %(levelname)s : %(message)s'
datefmt: '%Y/%m/%d %I:%M:%S'
handlers:
streamHandler:
class: logging.StreamHandler
level: {0}
formatter: default
stream: ext://sys.stdout
fileHandler:
class: logging.FileHandler
level: {0}
formatter: default
filename: {1}
loggers:
myLogger:
level: {0}
handlers: [streamHandler, fileHandler]
propagate: no
root:
level: {0}
handlers: [streamHandler, fileHandler]
disable_existing_loggers: False
"""

config.dictConfig(yaml.load(conf.format(level, filename), Loader=yaml.SafeLoader))

return logger
||<

使用方法は簡潔に、

  • level: loggingしたいログレベルを記載。defaultは'DEBUG'にしている。
  • filename: ログ出力をしたいファイル名を記載。ディレクトリは事前に準備すること。ファイルは自動で生成する。

出力結果

>|python3|
# 実行
## 関数を使用して設定 logger = my_logger(level = 'INFO', filename = './log/test.log')

## 出力
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')

# 出力結果 ログレベルを'INFO'にしたので、DEBUGは出力されない
2021/02/25 09:10:09 INFO : info
2021/02/25 09:10:09 WARNING : warning
2021/02/25 09:10:09 ERROR : error
2021/02/25 09:10:09 CRITICAL : critical
||<

カスタマイズしたい場合

  • format: ログ出力のフォーマットを指定できるため、いろいろなフォーマットを試すといいかも。 

下記サイトにformatterの指定やログレベルに関して説明がありますので、参照するのをおすすめします。

docs.python.org

今更だが背景

pythonで自作loggerを作られている方はいらっしゃるが、関数化されていなかったり、

yaml形式ではなく、一行一行setしている方が多かったため、自作をしようと思い立った。 

最後に

今回自作でloggerを作っていて思ったことは、意外と設定が面倒だなと思った。

各IT企業はloggerの作成はどうしているのだろう?会社基準とかあるのかな?と、ふと思ったが、意外とこういった知見共有はされないで終わるパターン多いよねと思う。

 

これからこのloggerをより使えるものにするために、下記を実施する予定だが、

もし「こういった機能が欲しい」「こういった指定がしたい」等あればコメントを貰えると嬉しいです。

  • ファイル名の指定がある場合はファイルにログを出力するが、指定がない場合はファイルへのログ出力は行わない
  • ファイルに出力するログと、sys.stderr(標準エラー)に出力するログレベルをそれそれ指定できるようにする

 

ユーザー定義例外クラスとかloggerとか作成してみると面白いよね。

 

自己紹介も兼ねた初投稿

はじめに

「社会人になったら、自分で学んだ内容をメモ程度にも残しておこう!」と思い立ち、はや1年以上が過ぎた。。。

しかし、何もしないまま2021年を迎えるのはよろしくないと思い、アカウントを作成してみました。

初めての投稿のため、簡単に自己紹介や興味のあること、これからのことを記載してみようと思います。

 

自己紹介

好きな飲物は上島珈琲のメロンソーダで、食べ物はカレーうどん

ゲームは好きだし、運動も好き。インドア派ではあるもののアウトドアもある程度好きな、どこにでもいそうな外資系コンサルで働く社会人2年目のエンジニアです。

 

興味あること

  • 心理学(犯罪・臨床・教育etc.)
  • 食品
  • プログラミング技術

上記の項目を中心にブログを作成していこうと思います。

 

これから

興味がある項目の内容を気ままに記載・投稿していく予定です。

そもそもブログを始めようと思ったきっかけは、将来的には講師の仕事をしたいなと思っており、そのためのトレーニングも兼ねています。

ただせっかく、ブログという不特定多数の目にも触れるものであるため、目的は先にも述べたとおり、自分へのメモが主体ですが、丁寧に記載していこうと思います。

たまたま検索して、たまたま閲覧して頂いて、私の記載した内容が誰かの興味を引いたり、助けになれれば喜ばしいです。

 

よろしくお願いします。

 

独り言

次に投稿するときはちゃんと目次を使いましょうね。