100日後にエンジニアになるキミ - 92日目 - 運用 - 運用・保守について

昨日までのはこちら

[100日後にエンジニアになるキミ - 91日目 - 運用 - 監視について](https://qiita.com/otupy/items/532d0f78b103d3b39b2d)

[100日後にエンジニアになるキミ - 90日目 - 開発 - CIについて](https://qiita.com/otupy/items/25786feaaa1b1f4d203f)

[100日後にエンジニアになるキミ - 88日目 - データ - データ転送について](https://qiita.com/otupy/items/e720e175c83a84e101c9)

[100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて](https://qiita.com/otupy/items/0016a1b9f496627619b6)

[100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について](https://qiita.com/otupy/items/6a4f960ba4df06e27050)

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

本日はに運用と保守についてです。

## 運用と保守

システム開発からサービスリリース後の流れざっくり説明すると
`要件定義(見積もり)`
`設計(基本・詳細)`
`コーディング`
`テスト(単体・結合・総合・受入)`
`運用`
`保守`
といった感じになります。

運用の仕事はサーバーやネットワークがトラブルで停止しないように
サービスリリース後のシステムの管理・運用をする仕事です。
ここを専門で行うエンジニアは運用保守エンジニアとも呼ばれています。

システム運用と混同しやすいものとしてにシステム保守があります。
システム運用が`トラブルを未然に防ぐ仕事`であるとすると
システム保守は`システムに起こったトラブルに迅速に対処する仕事`と言えると思います。

保守はハードウェア、ソフトウェア双方の問題を解決することになり
両方にまたがる仕事も多く、兼任しているエンジニアも多いです。

基本的には開発と運用は別物なのですが
大規模なシステムでない限りは開発とも兼任の方が多いと思います。

### 運用について

システム運用は基本的にはルーチンワークとなり開発の現場とは異なります。
とにかく、サービスを止めないことが重要です。

例えば広告運用を行なっている会社が、1時間システムを止めてしまうと
何百万円という売り上げが飛んでしまい、保証などもあれば大きな損失になります。

その減った売り上げや被った損失をカバーするのにどれだけかかるかを考えれば
システムを止めることが如何に恐ろしいことか分かると思います。

当然システムが停止し、稼働が難しい状況が続けば給料にも響いてきます。

特に金融系が止まることは致命的な事象です。
サービスが止まること自体許されないような仕事なので
運用の仕事の責任の重さがここで見えると思います。

具体的な仕事内容としては、基本はサーバーやログを監視して
正常に稼働しているかどうかをチェックします。

またB向けシステムであれば、エンドユーザーからの問い合わせに対応したりすることも
あるでしょう。

故障や異常なログが出ていないかを見ていることが殆どであるので
すごくまともな設計のシステムであれば、トラブルに巻き込まれるケースは少ないので
運用の仕事としては、日々の運用レポートのチェックを行い
故障の前兆がないかを日に何度か確認する程度の暇な仕事になることもあります。

ただし、ここで故障やトラブルが発生すると、途端に忙しくなります。
トラブル対応以降は`保守`になります。

### 保守について

トラブルが発生したら、まずはどこに問題があるのかを特定しないといけません。

`オンプレミス`の運用でハードウェア故障の場合の場合はサーバーを停止させて
故障部品の交換を行い、復帰させるといった作業を行います。

データセンターにサーバー類を置いてある場合は、現地に行って保守対応を行います。
１日作業になることもしばしばで、緊急時は夜中でも対応しないといけません。

問題はソフトウェアに原因がある場合です。
普通の開発であれば、開発用の環境と運用の環境は別で有るので
開発環境の方でエラーログなどから同じ事象が起きるかどうか再現します。

特定のデータが投入された時に事象が起きる等、原因が特定できれば
原因の元となるコードを修正してシステムをアップデートするスケジュールを組みます。

システムを止めずにアップデートすることが殆どですが
そもそもエラー発生でシステムが稼働しないような場合は
全てのサーバーを止めて再稼働させるなど恐ろしい作業が待っています。

運用や保守がスムーズに行えるように設計されたシステムであれば
こう行ったトラブルは少ないのですが、運用面の考慮が足りていない現場は
地獄の作業が待っています。

当然、正常稼働に戻すまでは家に帰れません。
保守作業は迅速に終えないと損失も大きくなるので、緊張感とも戦わなければなりませんので
保守はかなりハードな仕事でもあります。

## まとめ

昔は開発・運用・保守と全部兼務でやっていたので寝れない日々もありました。
全部の工程を経験すると、どこに問題が出てくるのか
勘所が分かってきます。

仕事の内容も大きく変わるので、自分が将来的に
どこの職種に就きたいのか、色々な職種の仕事内容を
知っておくと選択肢を絞るのに役立つと思います。


君がエンジニアになるまであと08日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython