【技術メモ】コンピュータシステムの色々

テクノロジー

技術的なメモではないけど、一応。

最近の若者でプログラマとかシステムエンジニアになりたい人って多いじゃないですか。

世の中にもいろんなシステムインテグレータ(システムエンジニアがいっぱいいる会社でおk)とか開発会社があります。

その会社それぞれ、得意とするコンピュータシステムの形態が異なります。

ゲーム業界でたとえると、鉄拳みたいな格闘ゲームに関わりたいとして、ゲームフリーク(ポケットモンスターを作ってる会社)に入社するのは違うじゃないですか。
どう考えてもそういう系のゲームを作ってる会社ではないですよね。

ゲームはさておき、一般のプログラムにはどういう種類があるのか、私の考える分類を並べてみた記事です。

動く形態による分類

だいたい「コンピュータシステム 分類」あたりでググると、この分類が出てきます。

スタンドアロンシステム

LANケーブルを挿さなくても、コンピュータ1台で完結するシステムです。

たとえばExcelとかWordとかはスタンドアロンソフトです。
会社で使う業務ソフトでいけば、見積書などの帳票作成ソフトでしょうか。手元のデータを流し込んだら、よしなに見積書を作ってくれて、あとはプリントアウトするだけ。ネットワークは使わないソフトですね。

開発者から見た良いところは、あまりセキュリティリスクを考えなくてよいことです。オフラインですからね。
ただしUSBメモリーなど外部媒体を挿す前提のシステムも多いので、端末そのもののセキュリティには気を配る必要があります。

反対に良くないところは、システムの日常メンテナンスからアップデートに至るまで、何から何まで客先へ直接出向かないといけないことです。オフラインですからね。
弊社のスタンドアロンシステムは、ものによっては近隣府県数十箇所に存在する納品先へ出向いて1つ1つメンテナンス(OSアップデートとか)をしています。クソッタレですね。

クライアントサーバシステム

この世で最も一般的なクライアントサーバシステムはWebシステムなのですが、それは次の節で扱うので無視します。

たとえばOAシステムはクライアントサーバシステムですね。
会社の机にある各パソコンは、机に出てるLANケーブルを挿すことで、全社で使ってる共有フォルダにアクセスできるとか。(ネットワーク上にファイルサーバが存在する例)
パソコンでOutlookとかThunderbirdとかを立ち上げるとメールが受信できるとか。(ネットワーク上にメールサーバが存在する例)
こういうのをOAシステムって言います。

他の例では、セキュリティソフトはわかりやすい例でしょうか。インターネット上にあるセキュリティ会社のサーバから、毎日パターンファイルを落としてきてますからね。

開発者的に良いところは、端末を遠隔操作したりデータを抜き取ったりというメンテナンスが容易なことです。
弊社のクライアントサーバシステムでは、数十箇所に存在する納品先へ出向かずとも、事務所からリモートデスクトップでログインしてプログラムにパッチを当てることができます。便利。

反対に良くないところは、セキュリティリスクが大きいです。
遠隔操作できるということはそれだけ入り込む隙が大きいです。遠隔操作する側の端末も防御が必要です。
さらにインターネットにつながってようものならWindowsやらセキュリティソフトやらフレームワークやら、何から何まで脆弱性が無いか気を配ることになります。

Webシステム

クライアントサーバシステムの一種です。サーバが「Webサーバ」であるシステムは全部コレです。

このブログ「ぽけ手帳」はWebシステムです。WebサーバにWordPressをインストールしてあるので、記事を書いたり見たりできるわけです。

思いつくサービス、GoogleとかYouTubeとかWikipediaとかnoteとかtwitterとか、あのあたり全部Webシステムです。

業務ソフトでは、例えばサイボウズ社のGaroonみたいなグループウェアはWebブラウザから見れますよね。(え?HCL Dominoを使ってるって?それはWebじゃないなあ…)
進んだ会社なら社内Wikiとか勤怠管理とか電子稟議をWebブラウザから使ってるんじゃないでしょうか。それ、Webシステムです。

開発者的には、日常の運用業務がとてもラクなのが嬉しいです。ログ採取をするときもWebサーバに入るだけなので超ラクです。

ただWebブラウザは他のプログラムより更新頻度が高いし、FlashやJavaアプレットみたいに当たり前に使っていたフレームワークが突然無くなるし、そのときの再構築が非常に難しい要素もあるし、保守・改修コストは意外と嵩みます。
またブラウザの挙動はPCのちょっとした設定で変わりがちで、トラブルの原因を突き止めるのに電話では不十分で結局出向くというのもしばしば。

クラウドシステム

個人的に「クラウドシステム」って呼び方は全くしっくりこないのですが…

要はAmazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azureみたいなものを使っているシステムです。

これらクラウドサービスを使って構築するのは結局クライアントサーバーシステムorWebシステムなんですが、実装のやり方が独特なため分類としては独立しています。

私が業務で携わっているシステムのうち、ここ2年ぐらいで新規導入してきたシステムは全部クラウドシステムです。AWS使ってます。

開発者的には、ログを見たりちょっと設定を変えたりするのはGUIで可能で、本腰入れて設定を変えるときはコマンドをテキストに書いて流し込むという精神衛生にとてもよいメンテナンスが可能というところが嬉しいです。
ローカルネットワークに閉じこもっているように見えて実はインターネットにつながっているので、「内部システムでエラーが出たらSlackへ投げる」みたいな物理マシンではポリシー的に大変厳しい処理もラクラク実装できて幸せです。

ただ、あまりに最近すぎる仕組みのため(たかが10年かそこらです)、各社に既存の開発書類(とくにER図や詳細設計書)が活かしにくいです。
20代ばかりのベンチャー企業なら「そんな書類書かなくてもええやん」的スタンスでいけるかもしれませんが、運用フェーズを経験した人間がその台詞を聞くと激怒します。
言い換えると、運用のやり方がクラウドじゃないシステムと大きく異なるということです。40年以上かけて染み付いてきた運用の脳を切り替えようと思うと、まああと40年はかかりますよね…

ということで、会社の歴史が長ければ長いほど、クラウドシステムは不向きです。

ホストシステム

ホストコンピューター(メインフレーム、汎用機とも)で動くシステム。現存します。

ホストコンピューターというのは、超くそでかい図体をしている割にパソコンよりコスパが悪い(お金をかけた割にあまりスペックが上がらない)ブツです。
パーソナルコンピュータとそれを利用したサーバ(上で述べたサーバは全部PCベースのサーバ)が普及する前にクライアントサーバ的なことをやろうとしたら、ホストコンピューターしか選択肢がありませんでした。

弊社は何年か前に新しいホストコンピューターがやってきました。まじかよもうすぐ令和だぞって思いました。

ちなみにホストコンピューターが現存するのは、銀行・公共団体(いわゆる勘定系システム)、鉄道(例:JRのマルスシステム)、航空業界などです。
どれも超大規模だし、リプレイスするためにシステムを停めようものなら一般市民への影響が計り知れないんですよね。

ホストコンピューターのメリットは、高信頼性・高速ということです。
パソコンより前から存在するので、少なくともWindowsとかUNIXとは比べ物にならないハイレベルな知見・トラブル対応方法が整えられています。
あとホストコンピューターの運用業務は割と単純で、WindowsみたいにGUIポチポチしないといけないわけでもないので、運用コストが安い点もメリットです。運用オペレーターさんも結構居ます。
コストでいけば、OSやセキュリティソフトなどのライセンス料が一切かからないのもメリットです。

が、まあ、古いです。間違いないです。枯れてます。
「枯れてるから安心なんだ」っていっても、いつまでCOBOLでプログラム書かないといけないんですか。COBOLだと基幹系システム以外のプログラム書けないですよ。
昨今はサーバを自社で持たない非所持化がわりとブームですが、ホストコンピューターがある限り物理マシンをゼロにはできません。
んでホスト屋の一番の言い分が「オープン化(ホスト型→クライアントサーバ型へ変えること)は再設計等コストがかかる、このまま維持運用したほうが安い」なんですが、それ進化やめてるって言うんですよ??いいのそれで??

個人的な業務の観点から付け加えると、Webシステムとの連携が非常にやりづらい点もマイナスです。ホストコンピュータとパーソナルコンピュータ間でのデータ連携は必ずエンコード・デコードが発生するため、見通しが悪いったらありゃしない。


利用シーンでの分類

ここからは観点を変えて、利用シーンでの分類を並べてみます。

会社によって、下のどれが得意なのかがハッキリ分かれています。自分のやりたいことと事業内容がマッチしているか確認しましょう。

基幹システム

会社の屋台骨となるシステムです。おおむね経営資源3要素である「ヒト・モノ・カネ」を司るシステムのことを指します。

ヒトなら人事システム(配属や異動の意思決定、成績管理、採用管理など)、モノなら販売管理システム(売上管理や見積作成など)、カネなら経理システム(会社のサイフの管理、税金支払いなど)あたりでしょうか。

これらはどんな会社でも絶対必要なものなので、IT業界内でもシェアは大きいです。
これをやってる会社はだいたい取引先が決まっているため、食いっぱぐれにくい業種でもあります。

ちなみに弊社は一応これがメインです。

業務システム

基幹システムほどではないけど業務に使うシステムのことです。

たとえばグループウェアシステム電子稟議システム社員教育システムのような、絶対あったら便利なんだけれど無くても最悪困らない系システムです。

独立系の会社が「このソフトで業務を効率よく!」って製品宣伝してるやつは十中八九コレです。なくても困らない、でもあったら便利というのを狙う市場です。
当たればウハウハ、当たらなかったらジリ貧な業種です。IT業界内での会社数は最多じゃないかな(主観)。

ちなみに弊社はこれもやってます。自分の部署はこれです。
グループウェアでも電子稟議でも社員教育でもない独特なシステムをやってるのですが、親会社の業種柄必要になる系システムなので黙っておきます。

一般向けサービス

たぶん学生諸君が「プログラマやりたい!システムエンジニアやりたい!!」って言ってるの、これじゃないです?

WordPressとかtwitterとかnoteとかYoutubeとかニコニコ動画とか、その類のものはこれです。
あとはスマホアプリ作ってる会社もこれです。
つまりBtoCです。

CMを見てるといっぱい会社があるように見えるのですが、IT業界全体での従業員の割合はごく僅かです。
あと、会社が不安定になりがちです。1つか2つかしかサービスを提供してない会社は、そのサービスに何かがあったらリストラor倒産一直線です。
よい点としては、ベンチャー企業がすごく多いので、社長も若く兼業プログラマ的なスキルを持っていて、若手が経営者と話しやすいところでしょうか。
取引先の一般向けサービスやってる会社さん(法人向けサービスの形で弊社と関わっている)は年に数回社員旅行で休業って日があります。学校みたいでいいな…って羨ましがってます。

私が一番やりたいのはこれで、一応主軸はこの分野に置かせてもらってるのですが、一般向けサービスは社内でも1つか2つかしかないので専業とはいかず、上の業務システムと兼業でやってます。。。

組み込み系

分類上ここが無難かな…?
これも立派なソフト屋の仕事です。

たとえばワイヤレスイヤホンって付いてるボタンを押したら再生・停止が切り替わったりしますけど、あれって誰かがプログラム組まないとそう動かないですよね。

他にも、ルンバも誰かがプログラミングしてるはず。トイレのウォシュレットも誰かが水の出し方を調整してるし、駅の自動改札機も誰かがゲートを開ける・閉めるロジックを決めてるはず、壁にかけてある電波時計も電波を自動受信したりアラーム鳴らしたりするプログラムが入っているはず。街の信号機だって、一定周期で色が変わるように組んでますよね。

そう、実は意外と多いのです。会社数としては少ないですが、少数精鋭の会社がめっちゃ多方面にプログラムを組んでます。
学生の頃からこれをやりたいって言う人はあんまり多くない印象(偏見)ですが、こんなことをやってる会社もあるということは覚えておくとよいでしょう。
というか、「大手ITメーカーに入ったと思ったら、なぜか自動改札機の開け閉めのプログラムを書いてた」ってことになる可能性のほうが高いかもですが。

むすび

いかがでs

自分はWeb系で一般向けサービスがやりたいんだろうなあ…って気がしてます。

が、直感で今の会社へ。
まあ正直一般向けサービスに関わりたいと思って入ったし、配属後はダイレクトにやりたかったサービス担当になれたので大失敗ではなかったと思うけれど、会社の姿勢を見るにどうも技術的進化を辞めてるっぽいので残念。

今から思えば、とある巨大基幹システムを主軸においた会社なのだから、会社全体の仕組みがそのシステムに揃っててもおかしくないよなーと反省。

そういう物の見方もあるので、学生の皆さんは参考にしてみてください。


カテゴリ名が「ひとこと技術メモ」だけど、全然ひとことじゃねえな。