IT系エンジニア

2021/10/25 18:02 その他::メモ

エンジニア系


IT 系エンジニアがどのような職種なのか、簡単に説明する資料を作ってみました。

インフラエンジニアから見る IT 業界
インフラエンジニアから見る IT 業界

以下で、それぞれの枠について説明したいと思います。

システム開発

システムエンジニアを大雑把にいえば、システムの組み合わせと調整を主に行います。
小さな運用スクリプトやマクロ等は作ることがありますが、大規模なアプリケーション開発は行いません*1

システム開発において「要件定義」「設計」「構築」「検証」といったフェーズで、それぞれの成果物を要求されます。

要件定義は、お客様から聞いた内容を要件として整理するフェーズです。
どんな要求があり、何を使って解決するのか、システムの大枠を整理します。
プロジェクトによっては、コンサルタントが既に済ませていることもあります。
アウトプットとして、要件定義書が求められます。

設計は、要件定義を具体的に落とし込むフェーズです。
細かい設定値はさておいて、要件に沿った方針を決める基本設計と、基本設計をもとに設定値に落とし込む詳細設計に分けることが多いです。
アウトプットとしては設計書(基本設計書/詳細設計書)になるのですが、実際に構築するための作業手順書が含められることも多いです。

構築は、設計値を元に、実際にシステムをくみ上げていくフェーズです。
作業手順書をもとに作業するため、アウトプットとして、いつ、手順書のどこを、どのように実行したかを示すエビデンスと、第三者が設定値を検証可能なエビデンスを求められます。
よく利用されるのは、ツーマンセルで一人が実行役、一人が記録役になります。記録役が、印刷された手順書に実行時刻を記載することが多い *2 です。

専用のアプリを作るまでもない、運用のためのスクリプトを作ることもあります。
最低限、フローチャートは読めないと困るでしょう。

システムで利用する機器とそれに付属する OS /専用アプリはもちろん、アプライアンス(システム用の製品)関係の知識も必要です。

非常に幅広い知識と応用力などが要求されます。

なお、システムエンジニアは基本的にプレイヤーなので、マネジメントも行うようになるとマネジメントプレイヤーもしくは何でも屋という名称で呼ばれたりします。
インフラエンジニア
システムエンジニア内でも専門性があり、次のように分かれます。
サーバエンジニア
コンピュータでサービスを動かし、システムに必要なサーバを提供するのが主な仕事になります。

サーバの物理的なスペックから載せる OS についての知識、サービス用のアプリケーションインストール、状況に拠ってはチューニングといった仕事を行います。

サーバには UNIX や Linux といった POSIX 準拠の OS 上で動くものや、Windows で動くものなどがあります。
Linux しか触れない、Windows しか触れないといったエンジニアもいます。

POSIX で共通仕様は決められていてもベンダーごとに特徴はあるので、HP-UX は使えても Solaris は分からないといったことはあり得ます。
ネットワークエンジニア
ネットワークケーブルを敷設し、お客様とサーバが円滑に通信できるネットワークを提供するのが主な仕事になります。
実績と信頼性の高さから、商業用には主に Cisco 製品の知識が求められます。
普段は bps (bit per sec) の単位でネットワークを見ているので、Byte 単位が基本のアプリ側とやり取りするときは変換が必須です。
データベースエンジニア
システムが利用する情報を整理し、適切に応答するデータベースを提供するのが主な仕事になります。
商業用には主に Oracle 製品の知識があると良いでしょう*3

OSS としては mariaDB が採用されることも多いです。
SQL という、DB 向けの言語であってもアプリ毎の設計方針から方言の癖がつよいので、この DB しか使えないという DB エンジニアもいます。
セキュリティエンジニア
システムに含まれる脆弱性と、無数のアタッカーからシステムを守るシステムを提供するのが主な仕事になります。
ネットワーク、OS、アプリそれぞれのセキュリティ情報や、防御用アプライアンスの知識などが求められます。
ソフトウェアエンジニア
ソフトウェエンジニアもシステムエンジニアに数えられますが、ここでは割愛して別項目にします。
ウェブエンジニア(未掲載)
ウェブエンジニアもシステムエンジニアに数えられます。
ただし、ウェブ上で利用されるシステムという、分かるような分からないような曖昧な定義になっています。

共通するのは、WebUI *4 をもつシステムに携わるというところです。

WebUI のデザインを行っているかと思えばネットワークのボトルネックを調べていたり、アプリケーション開発をしていたり、サーバのチューニングをしていたりします。

扱う範囲が広すぎるので、お客様が直接扱うソフトウェア側をフロントエンド、フロントエンドを構成するためのインフラ側をバックエンドと呼ぶようです。

上の図には未掲載です。
フロントエンドエンジニア
ブラウザで直接操作するアプリと、その UI を主に扱うエンジニアを、フロントエンドエンジニアと呼びます。
お客様の前に立つ、ホテルのフロントをイメージすると理解しやすいかもしれません。

HTML / CSS / XML / JSON といった、ブラウザで直接扱うマークアップ言語や、そのコードを出力するためのアプリケーションに Java / Ruby / PHP といったスクリプト(インタプリタ型言語)が使われています。

まれに、高速な応答が必要なシステムで C 言語といったコンパイラ言語(コンパイル型言語)が使われることもあるようです。

担当する業務によっては、ネットワークを意識することがないとか、他にもウェブデザイナー業務を担当することがあると聞いています。

バックエンドエンジニア
ブラウザ操作で意識しない、裏方のシステムを主に扱うエンジニアを、バックエンドエンジニアと呼びます。

インフラエンジニアと業務内容が被るのですが、インフラエンジニアはウェブ操作とは全く関係ないシステムも扱うため、微妙な差異で使い分けられています。
クラウドエンジニア(未掲載)
IaaS を中心としたサービスを主に扱うシステムエンジニアです。

コーポレートエンジニア

どちらかというと発注側のエンジニアで、社内システムに特化しているのがコーポレートエンジニアです。
社内エンジニアとも呼ばれます。

外注のために浅くても広い知識や、査収といった業務を行います。
このため、会社の業務知識だったり、他社への発注手続きだったりと、庶務系に比重が置かれることも多くなります。

また、次のツイートが参考になると思います。
言及のある、タスクディクショナリは、こちら。
https://icd.ipa.go.jp/icd/icd

コンサルタント

コンサルタントは、経営者やプロジェクトの責任者などが抱える課題について、アドバイスやソリューションを提供するのが主な仕事になります。
コンサルタントも専門で分かれるのですが、システムエンジニアからすると上流の仕事になります。

提案書を求められることがあります。
プリセールスエンジニア
プリセールスエンジニアはインフラエンジニアのなかでも営業に近く、システムの知識を持ちつつ、知識を生かした提案や、経営課題のソリューションを提供するのが主な仕事になります。
システムを見ながら、コンサルティングできるエンジニアです。
提案力(プレゼン能力)やコミュニケーションといった、政治力が強く求められます。

ワーカー

出来上がっている手順書の通りに、システムを構築したり検証したりといった作業を行います。
設計がおかしければ指摘したりする必要はありますが、基本的には事前にやることが決まっています。
そのため、エンジニアとは呼ばれません。

組込エンジニア

システムとしては少し毛色が変わりますが、組み込みエンジニアもエンジニアです。
サービスが動くのではなく、マイコンなどのデバイスで動くシステムを作ります。

どちらかというと、デバイスを制御するためのシステムですね。
ハードウェアの知識が必要になるため、デバイスの開発を行うこともあるようです。

コンピュータを内蔵する機械であれば組込システムが存在するため、目立ちませんが必要な役割です。
デバイス
組込エンジニアでも、身近な製品(デバイス)を開発するのがメインのエンジニアです。

IC やら抵抗やら、基盤設計を行う人がいると思えば、出来上がった基盤を制御するソフトウェア開発を行う人もいます。
もちろん、全部面倒みる人もいます。

マイコン(マイクロコンピュータ)や、組込 Linux もあって、外部からはかなり混沌とした業界のように見えます。
制御ソフト
ミシンや自動車といった身近なものから、工業ロボットのような大型の機械を制御するソフトウェア開発も、組込エンジニアのようです。

*1 : アプリケーション開発は、ソフトウェアエンジニアの仕事です。

*2 : PCでの時間入力は、改ざんが容易なため敬遠される傾向があります。

*3 : これを書いている時点では Oracle 社の経営方針に嫌気がさし、OSS に移行するユーザも増えています。

*4 : WebUI は、ウェブブラウザによりユーザがシステムを操作するインターフェースのこと。

ステークホルダー

アプリ開発

ここでは、システムエンジニア視点でのステークホルダーとしてくくっています。
デベロッパ
開発する人たちの総称です。

BIND、Apache/nginx、Sendmail、Samba、Docker/CRI-Oなどサーバとして動かすアプリを開発する人たちが含まれます。
彼らがいなければ、システムエンジニアは成り立ちません。

アプリに対する深い理解が必要不可欠です。
アプライアンス
特定目的のアプリを、想定されるユースケースにおいて使いやすいシステムで提供するベンダーです。

条件によっては採用するほうがコストが安く品質を上げられるため、彼らが世に出す製品は広く知っておくべきです。
あまり詳細を知れないので、雲の向こう側として表現しています。
その他
ソフトウェアエンジニアという呼称が存在する、立派なエンジニアです。
こちらもシステム開発動揺、要件定義、設計、コーディング、検証といった流れが存在します。
Web アプリを開発するなら、Web エンジニアと呼ばれたりするようです。

書いている人がソフトウェアエンジニアではないので外から眺めた感じの表現になってしまいますが、概ね間違っていないと思います。
ソフトウェアエンジニア
要件定義から検証まで、一貫して行えるアプリケーション開発者がソフトウェアエンジニアだと考えています。
プログラマ
要件定義の済んでいるアプリケーションを、設計から行うのがプログラマだと考えています。
コーダ
コーダは設計済みのフローチャート通りにコーディングする人のことだと考えています。
システムエンジニアにおけるワーカーのようなものですね。
テスタ
開発の済んだコードが、要件を満たす挙動をするかどうか試験するのがテスタだと考えています。
デバッガ
ほぼほぼテスタなのですが、開発の済んだコードの検証に加えて、開発者の想定外の挙動までチェックするのがデバッガのイメージです。

運用・保守

システムを作っても、それを維持したり、状況の変化に応じてメンテナンスしたりしなければ、動かないシステムになってしまいます。
基本的には想定される状況がすべて網羅された手順書があり、就職先としてのハードルは低いです。

問題が起きたら即座に対応しなければならないサービスの場合、システムエンジニアが兼任することもあります。
ヘルプデスク
クライアントの設定から故障対応まで、ユーザが操作するコンピュータを責任範囲とします。
理不尽が多いのも特徴です。
オペレータ
運用(オペレーション)を行います。

運用とは、たとえばユーザアカウントの追加や定期的な稼働確認といった内容になります。
24時間365日、システム監視ツールが動き、問題を検出したら状況確認から対応することになります。

対応は、関係部署への連絡です。

手順書はありますが、簡単に障害箇所を切り分ける能力が、ある程度求められます。

サーバが不通であればシステムエンジニアへ連絡。
ネットワークに問題があれば、ネットワークエンジニアに連絡。
物理機器が故障しているようであれば、保守員へ連絡。

そういった連絡が主な仕事です。
ただし、切り分けの結果によってはその場で対応しなければならないことも多く、運用と保守はひとまとめにされることも多いです。
保守員
保守(メンテナンス)を行います。
勤務時間は保守契約により日中対応だけのものから、24時間対応のものもあります。

保守とは機械が壊れたときに交換するといった内容になります。
基本的には連絡待ちになりますが、初期稼働を早めるためにシステム監視を行うことがあります。

内容的に運用と被るものが多いので、運用と保守はひとまとめにされやすいです。

管理

プロジェクトやプレイヤーのマネジメントを行う人たちです。
PM
PM はプロジェクトマネージャーの略で、プロジェクトを管理します。
管理とは、予定をたてたり、進捗状況をみてテコ入れをしたり、お客様と交渉したり、成果物を見て改善を指示したりといった内容です。
進捗管理や品質管理といった呼称が使われます。
PMO
PMO はプロジェクトマネジメントオフィスの略で、PM が担当するプロジェクトをチームとして支援します。

PM は一人ですが、PMO は複数人でプロジェクトにあたります。
大規模な開発では一人で進行を管理しきれないため、必要となります。
PL
PM の立てた計画を遂行する立場です。

場合によってはシステムエンジニアが兼任することもありますし、システムエンジニアに PL の能力を求める人もいますが、基本的に PL はマネジメント側になります。

発注

ビジネスオーナー
ここでは、プロジェクトを定義して、システムを発注するのがビジネスオーナーであると定義しています。
システムエンジニアが直接話す機会は少なく、雲の上の存在となっています。

クラウド

2021/05/16 17:03 その他::メモ

クラウド


システムエンジニアの現場では、2000年頃に管理責任がなくて構成が分からないネットワークをクラウドと呼んでいました。
インターネットなら、インターネットクラウドといった感じです。

国外 IaaS

[Amazon] AWS
Amazon Web Service
[Microsoft] Azure
Microsoft Azure
日本では、アジュールと読むのが一般的。

re で終わると、どうしても長音(アー、とかの伸ばす音)で読んでしまう……。
[Google] GPC
Google Cloud Platform
[Tencent] Tencent Cloud
Tencent Cloud
[IBM] SoftLayer
IBM SoftLayer

SoftLayer Technologies の展開していたクラウドサービスだったが、2013年7月に IBM が買収した。

[IBM] IBM Cloud
IBM Cloud
2016年4月に VMware vCloud Air が日本リージョンから撤退。
2017年に vCloud Air 事業はフランスに本社を置く OVH へ売却。
同年、OHV と協業で IBM が VMware on IBM Cloud を展開。
[Alibaba] Alibaba Cloud
Alibaba Cloud
中華人民共和国では、阿里云という名称らしい。

https://jp.alibabacloud.com/notice/account-migration-20210226
日本では、SBクラウド株式会社が提供していたようだが 2021年3月31日(水)に終了していた。
[Oracle] OCI
Oracle Cloud Infrastructure

国内 IaaS

[NTTコミュニケーションズ] Enterprise Cloud
NTTコミュニケーションズ Enterprise Cloud
[KDDI] クラウドプラットフォームサービス
KDDI クラウドプラットフォームサービス
[Softbank] ホワイトクラウド ASPIRE
ホワイトクラウド VMware vCloud Datacenter Service
ソフトバンク ホワイトクラウド ASPIRE
[FUJITSU] K5
FUJITSU Cloud Service K5
[NEC] NEC Cloud IaaS
NEC Cloud IaaS

https://jpn.nec.com/cloud/service/platform_service/iaas.html
[IIJ] GIOインフラストラクチャーP2
IIJ GIOインフラストラクチャーP2
[IDCフロンティア] IDCFクラウド
IDCフロンティア IDCFクラウド
[Nifty] ニフティクラウド
ニフティクラウド
[さくらインターネット] さくらのクラウド
さくらインターネット さくらのクラウド
[GMO] ALTUS
GMOクラウド Public ALTUS
[BIGLOBE] BIGLOBEクラウドホスティング
BIGLOBEクラウドホスティング

Linux


Linux

Tera Term に関わる事柄を中心に、Tera Term でアクセスする Linux の情報をまとめたページとなります。

Debian

技術情報
サポート期限
Verコードネームキャラクター名リリース日サポート終了日ポイントサポート終了日(LTS)
1.0--1996/06/16
1.1buzzバズ・ライトイヤー1998/07/24
1.2rexレックス
1.3boボー・ピープ
2.0hammハム2002/07/19
2.1slinkスリンキー・ドッグ
2.2potatoミスター・ポテトヘッド
3.0woodyウッディ2003/08/16
3.1sargeグリーン・アーミー・メン
(バケット・オブ・ソルジャー)の軍曹
4.0etchエッチ・ア・スケッチ2007/04/08
5.0lennyレニー2009/02/14
6.0squeezeリトル・グリーン・メン
(スクイーズ・トイ・エイリアン)
2011/02/06
7.0wheezyウィージー2013/05/042016/4/257.112018/5/31
8.0jessieジェシー2015/04/252018/6/178.112020/6/30
9.0stretchストレッチ2017/06/172020/7/69.112022/6/30
10.0busterバスター2019/07/062022/6/3010.22024/6/30
11.0bullseyeブルズアイ2021/8/142026/6/30
12.0bookwormブックワーム2023/6/10

その他

情報参照元

2019/08/12(月)Tera Term の「リンク」と「接続」


Tera Term の「リンク」と「接続」

Tera Term は、複数のプログラムで構成されていて、相互にプロセス間通信をすることで成り立っています。

Tera Term のヘルプから画像を引用します。

Tera Term モジュール構成
Tera Term モジュール構成

上記の図からは Tera Term 本体 (ttermpro.exe) と Tera Term マクロ実行プログラム (ttpmacro.exe) が異なることがわかります。
「リンク」と「接続」の違いを説明する上で、これの理解が必要になります。

リンク

Tera Term マクロ実行プログラム (ttpmacro.exe) から見た Tera Term 本体 (ttermpro.exe) へのアクセス有無を「リンク」と呼んでいます。
このため、マクロが Tera Term 本体へ通信している状態を「リンクしている」と呼び、マクロが Tera Term 本体へ通信していない状態を「リンクしていない」と呼んでいます。

リンクするためには ttpmacro.exe が connect 等で ttermpro.exe と DDE によるプロセス間通信を行う必要があります。
DDE については、このページの下部にもう少し技術的な内容を書いたのでここでは省略します。

また Tera Term を終了した場合、デフォルト設定では併せてリンクも終了するようになっています。

Point:
DDE による Tera Term 内アプリケーション同士のプロセス間通信。

接続

Tera Term 本体が「Tera Term を構成するプログラム以外」のサーバやスイッチングハブ等と通信している状態を「接続」や「アクセス」と呼んでいます。

Telnet や SSH 等のプロトコルで通信している状態ですね。

Point:
TCP/IP による通信。

DDE

DDE (Dynamic Data Exchange) は日本語で「動的データ交換」とも呼ばれる Windows 2.0 (1987年) の時代に発表されたプロセス間通信のメカニズムです。

DDE 通信から見た Tera Term の「リンク」は Tera Term 本体がサーバ、マクロ実行プログラムがクライアントになっています。
サーバ - クライアントモデルで通信していると書くと TCP/IP による Telnet や ssh との通信と混乱しかねませんが、実のところ概念は同じものでも利用している技術が異なります。

OLE (Object Linking and Embeddin) の登場以降では活躍の場が少なくなったものの VBA といったマクロを介さず利用できることから 2017 年 10 月にはセキュリティ研究者が DDE を悪用したマルウェア拡散手順を公開、2017年12月には Word の DDE 機能がデフォルトで Disable される*1という変遷がありました。

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV170021

この攻撃手法については https://www.ipa.go.jp/files/000063813.pdf に詳しいため、参照いただければ幸いです。
参照先の PDF では「この文書には、他のファイルへのリンクが含まれています。リンクされたファイルのデータでこの文書を更新しますか?」といったダイアログボックスが表示されていることがわかります。

これらのことから、セキュリティの向上という名目で DDE が無効化される流れも想像できます。
Windows で DDE が利用できなくなると Tera Term マクロが動作しなくなります。

*1 : Excel や Outlook は、現在でも DDE を利用可能。

2019/08/08(木)SCP のダウンロード先をデスクトップに


SCP のダウンロード先をデスクトップに

https://osdn.net/projects/ttssh2/forums/5841/41014/#forum-message-83348

これに口をはさんだ後で「マクロで作るならどうやるだろう?」と思ってしまったので作ったマクロ。

inputbox でダウンロードするデータを指定しておいて、デスクトップに送ってみる。

; ダウンロードするファイルの指定
inputbox 'Download file' 'input'
SrcFileName = inputstr

; ダウンロード先
expandenv BaseDir '%HOMEDRIVE%%HOMEPATH%'
sprintf2 DestFileName "%s\Desktop\%s" BaseDir SrcFileName

messagebox DestFileName 'DestFileName'

; コマンド scprecv <remote file name> [<local file name>]
;scprecv SrcFileName DestFileName


ここまで書いて、私は思いました。

「……あ、これ .ttl ファイルをダブルクリックしただけじゃだめじゃん。」

そう、メニューから「コントロール」→「マクロ」で呼び出さないといけません。
うーん、デスクトップ指定が面倒だと言っているのに、あんまり面倒さが変わらないw


というか、だ。
自分が Tera Term の SCP 機能を使うときは、ダウンロード先を開いたうえで、ソースとデストのパスをそれぞれテキストエディタにコピペしてた。
ソースは Tera Term の画面で echo $(pwd)/xxx とかでフルパス出力させればコピペも楽だったし。

他の人……というか同僚が WinSCP を使う中、自分だけそんなやり方をしてたのを思い出す。


うーん、サンプルマクロの記事としては微妙なので、技術メモとして。

何か応用効くかなぁ……

一応、上記サンプルマクロのバージョン情報を。
利用マクロのバージョン情報
種別:通信Ver機能の簡易説明
scprecv4.57以降SCPプロトコルでファイルを受信する。
種別:文字列操作Ver機能の簡易説明
expandenv4.71以降環境変数文字列を展開する。
sprintf24.62以降フォーマットされた出力を返す。
種別:その他Ver機能の簡易説明
inputbox文字列を入力するためのダイアログボックスを開く。
4.53以降デフォルト入力文字を設定するオプションの追加。
4.54以降特殊文字の解釈を制御するオプションの追加。
messageboxダイアログボックスを開き、ユーザーにメッセージを知らせる。
4.54以降特殊文字の解釈を制御するオプションの追加。
4.60以降キャンセル時にマクロ停止を確認する機能の追加。

Tera Term 本体が、環境変数をデフォルトで解釈してくれるならすごくうれしい。