BGP Flow Specification を RFC8955 とパケットキャプチャから学習してみた

はじめに

この記事は BBSakura Networks Advent Calendar 2023 の 11 日目の記事です。

こんにちは! BBSakura で基盤となるネットワークを開発している酒井です。

私は業務として OCX の基盤となるネットワークの開発や AS2915 の運用に携わっており、普段から BGP を触る機会が多いです。そのなかで BGP Flow Specification (以降は BGP Flow Spec と呼びます)を有効に活用できないかと考えることがありました。

BGP Flow Spec の詳細は後述しますが、端的に言うと BGP でトラフィックフロー情報を送受信することで、トラフィックフロー情報の受信側において動的なパケットフィルタリングや細かいルーティング制御を実現する技術 だと私は考えています。

BGP Flow Spec の活用を考えるにあたっては、まずは知ることから始めようということで BGP Flow Spec について自分なりに調査しました。この記事では、頭の整理もかねてその調査内容をまとめたいと思います。

具体的な調査内容としては、下記の 2 点を行ないました。

  • RFC 8955 を読む
  • BGP Flow Spec のパケットをキャプチャをして内容を眺める

本記事では上記の内容をそれぞれ説明していきます。

RFC 8955

BGP Flow Spec は 2008 年に RFC 5575 が発行されて仕様が決定しました。私が思っていたよりも昔からある技術で少し驚きました。その後、 2020 年に RFC 5575 の内容を改訂する形で RFC 8955 が発行されました。そのため、 RFC 5575 は Obsolete されており、今から学習するのであれば RFC 8955 を読めば OK です。

細かいですが、 RFC 8955 では IPv4 Unicast と VPNv4 の Flow Spec について定義されており、 IPv6 については次の RFC 8956 で定義されています。

さて、内容へと入る前に Flow Spec (Flow Specification)とはそもそも何でしょうか。 Flow Spec とはレイヤー 3 ・ 4 の情報で構成する トラフィックフローをフィルタリングするための情報 になります。この RFC 8955 では BGP を拡張して下記の内容をやり取りするための仕様を定めています。

  • Flow Spec (トラフィックフロー情報)を構成するためのレイヤー 3 ・ 4 のフィルタリングパラメータ (NLRI)
  • Flow Spec に合致するトラフィックフローに対するフィルタリング時のアクション (BGP Extended Community)

つまり、 BGP Flow Spec とは、 特定のトラフィックフローを表現するためのフィルタリング情報とそのトラフィックフローに対するフィルタリング時のアクションを決めて、それを BGP によって動的に伝搬して、伝搬先で当該トラフィックフローに対してフィルタリングアクションを実行すること を目的としています。こういった目的であることから、 BGP Flow Spec の主な応用先として下記の 3 つが RFC 内で挙げられています。

  • Prevention of traffic-based, denial-of-service (DoS) attacks
  • Traffic filtering in the context of BGP/MPLS VPN service
  • Centralized traffic control for SDN/NFV networks

この RFC 8955 が定義している詳しい内容を以降で説明します。

Flow Spec を構成するためのレイヤー 3 ・ 4 のフィルタリングパラメータ

Flow Spec を構成するためのレイヤー 3 ・ 4 のフィルタリングパラメータについては、 RFC 8955 のセクション 4.2.2 で NLRI の Component として定義されています。

Component の具体的な内容として、下記のものが Type 1 ~ 12 として定義されています。

Type Component 値の例 複数値(リスト)の指定可否
Type 1 Destination Prefix 192.0.2.0/24 不可
Type 2 Source Prefix 192.0.2.0/24 不可
Type 3 IP Protocol TCP, UDP, ICMP
Type 4 Port1 22, 443
Type 5 Source Port 22, 443
Type 6 Destination Port 22, 443
Type 7 ICMP Type 0(エコー応答), 8(エコー要求)
Type 8 ICMP Code 0, 1
Type 9 TCP Flags SYN, ACK, FIN
Type 10 Packet Length 500, 1000
Type 11 DSCP 0, 63
Type 12 Fragment DFビット, First Fragment

これらの Type を組み合わせることで、 1 つのフローを定義します。 RFC 内では複数 Type を組み合わせた具体的な例も 4.3 で提示されており参考になります。なお、リストによる複数値の設定が可能な場合は、複数値の間で lt, gt, equal の比較演算子や AND ・ OR の論理演算子を用いて、柔軟な値を設定できます。例として、 RFC の 4.3.2 では Type 4 の Port の値として、 {range [137, 139] or 8080} (ポート番号 137 ~ 139 もしくは 8080)が設定されています。

これだけのパラメータと柔軟性があれば、 L3 ・ L4 のパケットフィルタリングとしてはたいていのユースケースはカバーできるかと思います。

Flow Spec に合致するトラフィックフローに対するフィルタリング時のアクション

フィルタリング時のアクションは BGP Extended Communities によって伝搬されます。 RFC 8955 の セクション 7 で下の表のように BGP Extended Community Type が定義されています。

Community Type action 値の説明
0x8006 traffic-rate-bytes バイト単位での流量制限
0x800c traffic-rate-packets パケット単位での流量制限
0x8007 traffic-action Flow Spec の挙動2
0x8008 rt-redirect AS-2octet 指定のVRFへリダイレクト
0x8108 rt-redirect IPv4 同上
0x8208 rt-redirect AS-4octet 同上
0x8009 traffic-marking 上書き後の DSCP の値

上記以外にも将来的な Type の追加や、ベンダー固有の Type があってもよいと RFC には書かれています。

補足すると、 0x8008・0x8108・0x8208 の末尾の sub-type が 08 となっているものは BGP Extended Community のエンコードフォーマット(後半 6 オクテットの使い方)が異なるだけで、アクションとしては同一となります。

トラフィックレートの制限によって、 DDoS 攻撃への防御や分散ルータへのファイアウォール設定などの使い方ができそうです。なお、トラフィックレートを 0 にすることで該当するすべてのパケットの破棄を指定できます。

また、 VRF へのリダイレクトによりトラフィックフローを曲げることも可能となります。 詳細は割愛しますが、この RFC で定義されている VPNv4 Flow Spec も組み合わせることで、 VPN 間でトラフィックフローをやり取りすることもできそうです。実際に、 Interop 2017Interop 2018 の Shownet ではサービスチェイニングの実現のために Flow Spec が使用されていたようです。

パケットキャプチャ

ここまで RFC 8955 に書かれている仕様について説明してきました。ここからは実際に BGP Flow Spec のパケットをキャプチャして具体的な中身を見ていきましょう。

環境の構築

今回は手軽にパケットキャプチャしたいので、 BGP Update を送信する側として GoBGP、受信側として VyOS を使用します。

GoBGP の Flow Spec 使用方法は GitHub リポジトリ で説明されています。 VyOS の方はまだ Flow Spec についてはちゃんとはドキュメント化されていないようですが Configuration Commands から flowspec で検索をかけると関連する BGP Flow Spec の設定を確認できます。

今回は BGP Flow Spec の Update パケットをキャプチャできればよいので、下の図のように GoBGP と VyOS を一対一で接続するだけの簡単な構成とします。

パケットキャプチャを行なう環境の構成図。左にVyOSを表すルータ、右にGoBGPを表すサーバがある。ルータとサーバは1本の線で結ばれている。サーバ側にはパラメータとして192.168.10.1/24とAS65001、ルータ側には192.168.10.2/24とAS65002が与えられている。サーバ側からルータ側へBGP Updateパケットの送信方向を表す矢印が描かれている。
パケットキャプチャ構成図

GoBGP はバージョン 3.19.0 を使用し、 gobgpd -f <設定ファイル> & で下記の内容の設定ファイルを読み込ませます。

[global.config]
  as = 65001
  router-id = "192.168.100.1"
  local-address-list = "192.168.10.1"

[[neighbors]]
  [neighbors.config]
    peer-as = 65002
    neighbor-address = "192.168.10.2"
    local-as = 65001

    [[neighbors.afi-safis]]
        [neighbors.afi-safis.config]
        afi-safi-name = "ipv4-flowspec"

VyOS はバージョン 1.4 (2023/10/28 時点のローリングリリース)を使用し、下記の内容を設定します。

set interfaces ethernet eth1 address '192.168.10.2/24'
set protocols bgp neighbor 192.168.10.1 address-family ipv4-flowspec soft-reconfiguration inbound
set protocols bgp neighbor 192.168.10.1 remote-as '65001'
set protocols bgp system-as '65002'

設定が正しければ BGP neighbor が Up することを確認できます。

vyos@vyos:~$ show bgp ipv4 flowspec summary
BGP router identifier 192.168.10.2, local AS number 65002 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 20 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
192.168.10.1    4      65001         4         4        0    0    0 00:01:12            0        0 N/A

Total number of neighbors 1

この構成で GoBGP から BGP Flow Spec Update パケットを送信します。 VyOS 側ではコマンドによる受信確認とパケットキャプチャを行ない、キャプチャ結果である pcap ファイルを Wireshark で眺めます。(本当は Vyos でパケットフィルタリング時のアクションも見たかったのですが、現時点では受信した Flow Spec を実際のトラフィックにフィルタリング適用する実装は VyOS にはまだ無いようでした)。

パケットキャプチャ結果

Flow Spec の内容を段階的に複雑にしながら見ていきたいと思います。

まずは、単純な内容からスタートします。 Source Prefix のみでフィルタリングを行ない、フィルタリングアクションとしてはトラフィックレートを制限するものを用いてみます。なお、BGP Flow Spec に関わる GoBGP のコマンドは先ほど紹介した GoBGP の Github リポジトリ から確認できます。

GoBGP コマンド: gobgp global rib -a ipv4-flowspec add match source 192.168.200.0/24 then rate-limit 10

上記のコマンドにより GoBGP 側の RIB に登録されたことが見えます。

root@gobgp:/gobgp# gobgp global rib -a ipv4-flowspec
   Network                    Next Hop             AS_PATH              Age        Attrs
*> [source: 192.168.200.0/24] fictitious                                00:00:44   [{Origin: ?} {Extcomms: [rate: 10.000000]}]

また、 VyOS でも当該の BGP Flow Spec Update を正常に受信していそうです。

vyos@vyos:~$ show bgp ipv4 flowspec detail
BGP flowspec entry: (flags 0x418)
        Source Address 192.168.200.0/24
        FS:rate 10.000000
        received for 00:00:11
        not installed in PBR

Displayed  1 flowspec entries

実際に取得した pcap ファイルを Wireshark で見てみます。下の図が BGP Update のパケットの内容になります。 Path attributes -> MP_REACH_NLRI -> NLRI と見ていくと、 FLOW_SPEC_NLRI があり、 Type 2 の Source Prefix 192.168.200.0/24 がエンコードされていることがわかります。

1つ目のBGP UpdateパケットのNLRI部分のWiresharkスクリーンショット。Path attributes、MP_REACH_NLRI 、NLRIと見ていくと、期待通りにFLOW_SPEC_NLRIがあり、Type 2のSource Prefix 192.168.200.0/24 がエンコードされていることがわかる。
1つ目のBGP Update - NLRI

また、下の図の Path attributes -> EXTENDED_COMMUNITIES と見ていくと、 Type 0x8006 (Type 0x80 と Subtype 0x06)の traffic-rate が値 10 でエンコードされていることがわかります。

1つ目のBGP UpdateパケットのBGP Extended Community部分のWiresharkスクリーンショット。Path attributes、EXTENDED_COMMUNITIESと見ていくと、期待通りにType 0x8006 (Type 0x80とSubtype 0x06)のtraffic-rateが値10でエンコードされていることがわかる。
1つ目のBGP Update - BGP Extended Community

問題なく BGP Flow Spec の Update をやり取りできていそうです。

次に、複数のフィルタリング Type を組み合わせることを試してみます。具体的には、フィルタリングパラメータとして Destination Prefix と Destination Port の Type を加えてみます。この時、 Destination Port としては複数の値を比較演算子や論理演算子で表現してみます。

GoBGP コマンド: gobgp global rib -a ipv4-flowspec add match destination 192.168.100.0/24 source 192.168.200.0/24 destination-port '>=100&<=200 ==400' then rate-limit 10

下のこの BGP Update のパケットキャプチャの図を見ると、 Destination Prefix 192.168.100.0/24 と Destination Port が追加されています。また、 Destination Port は (>=100 && <=200 || =400) というように期待通りに複数の値を組み合わせたものとなっていそうです。

2つ目のBGP UpdateパケットのNLRI部分のWiresharkスクリーンショット。期待通りにDestination Prefix 192.168.100.0/24とDestination Portが追加されていることがわかる。また、Destination Portはコマンドで指定した通り、ポート番号100から200、または、400という複数の値から比較演算子や論理演算子で表現した形通りにエンコードされている。
2つ目のBGP Update - NLRI

最後に、ビットマップ形式のフィルタリングパラメータである Type 9 の TCP Flags をフィルタリングに追加し、アクションとしては RT Redirect を用いてみます。

GoBGP コマンド: gobgp global rib -a ipv4-flowspec add match destination 192.168.100.0/24 source 192.168.200.0/24 destination-port '>=100&<=200 ==400' tcp-flags SA then redirect 65003:65003

NLRI を見てみると、TCP Flags フィルタリングとして SYN と ACK がセットされていることがわかります。それ以外のフラグは Not set となっているので期待通りです。

3つ目のBGP UpdateパケットのNLRI部分のWiresharkスクリーンショット。NLRIを見てみると、期待通りにTCP FlagsフィルタリングとしてSYNとACKがセットされていることがわかる。
3つ目のBGP Update - NLRI

また、フィルタリングアクションとして RT Redirect が問題なくエンコードされています。 (type 0x80: 2-octet AS, 4-octet value) の形式でコマンドの redirect 部分を指定したので、 Type が 0x8008 になっています。

3つ目のBGP UpdateパケットのBGP Extended Community部分のWiresharkスクリーンショット。EXTENDED_COMMUNITIESを見ていくと、期待通りにRedirectのアクションがType 0x8008形式でエンコードされていることがわかる。
3つ目のBGP Update - BGP Extended Community

以上となります。全然問題なく BGP Flow Spec Update パケットを確認でき、 GoBGP ありがたいと感じました。

おわりに

今回の記事では RFC 8955 やパケットキャプチャを通して行なった BGP Flow Spec の調査の内容について書きました。

記事の途中で書いた通り、 Flow Spec 自体は 2008 年に RFC が発行された技術ですので、今更感がある内容だったかもしれませんが参考になれば幸いです。 RFC 8955 には今回説明していない Validation 3などの内容もあったのですが、記事が長くなりそうでしたのスキップしました。詳細を確認したい方はぜひ RFC 8955 を読んでいただければと思います。

もし、今回の記事を通して BBSakura Networks という会社に興味を持たれた方がいましたら、会社ホームページの 採用情報 をご確認ください。ネットワークで面白いことがしたい人にはオススメの会社かと思うので、お気軽にお問い合わせください。

明日以降も BBSakura Networks Advent Calendar 2023 は続きますので、楽しみにお待ちください。


  1. Type 4 の Port は送信元ポート・宛先ポートのどちらにも適用されます。
  2. 複数の Flow Spec が存在していた場合に、 1 つの Flow Spec 条件と合致した時に後続の Flow Spec も評価を行なうかどうかを指定できる。また、トラフィックのサンプリングやログ取得の ON / OFF を指定できる。詳細は 7.3 を参照してください。
  3. Validation については RFC 9117 でリバイズされています。

1ヶ月かかってAWS Certified Cloud Practitioner取得した話

こんにちは、BBSakura Networks株式会社(以降BBSakura)にてOCXサービスのクラウド直接接続まわりを担当してるキムです。

前回はCCNAを取得した話で記事(新卒がCCNAを取得した話 - BBSakura Networks Blog)を書かせていただきましたが、そのあとAWSのCertified Cloud Practitionerを取得したのでその話を少しやってみようかなと思います。

AWS Certified Cloud Practitioner(AWS-CLF)とは?

aws.amazon.com

Amazon Web Serviceの一番ベースになる資格として、クラウドサービスの概要やメリット、AWSの各サービスの役割や特徴を広く理解することが求められます。私自身、AWSの知識や経験はほとんどありませんでしたが、業務でAWSを扱うことになるため、まずはAWSの基礎を学ぶためにAWS-CLFを受験することにしました。

AWS-CLFの試験時間は90分、問題数は65問で、合格するためには70%以上の正解率(1000点のうち700点)が求められます。 受験料は12100円です。(前回受験料43200円のCCNAを受講したので、だいぶ安いと感じてしまいました笑)ただ、AWSのキャンペーンやイベントに参加するとバウチャーがもらえることもあるらしいので、探してみてもいいかもです!

このAWS-CLFですが、2023年9月19日にCLF-C01からCLF-C02にバージョンアップされ、出題されるサービス数が64個から130個に、大幅に増えてます。 AWS自体、現在もいろんなサービス&機能が追加されているので、今後も大規模なバージョンアップがあるのではないかと思います。

勉強法

AWS Cloud Practitioner Essentials

AWS公式のCLF講座です。AWSの基本的な概念やサービスについて、例えを用いてわかりやすく解説されています。また、無料で受講できるので、AWSに興味がある方にはおすすめです!

https://www.aws.training/Details/Curriculum?id=34408&redirect=false

Udemy Business

BBSakuraはUdemy Businessに加入しているので、AWS-CLFに関する講座を活用しました。 以下私が受講したUdemyの講座+練習問題です。

講座

【CLF-C02版】これだけでOK! AWS認定クラウドプラクティショナー試験突破講座(豊富な試験問題300問付き) | Udemy

日本語でできてるAWS-CLFの講座の中では一番知られてる講座かなと思います。講座にあてる時間が少なく、すべてのレクチャーを見ることはできませんでしたが、比較的わかりやすかったです。また、AWS-CLFの全範囲をまとめた資料が配布されるので、その資料を元に自分でメモを追加しながら復習に有効活用しました。(下の灰色の四角がスライドから持ってきた図になります)

AWS-CLFノート
AWS-CLFノート

練習問題

【CLF-C02版】この問題だけで合格可能!AWS 認定クラウドプラクティショナー 模擬試験問題集(6回分390問) | Udemy

一番時間をかけたのがこの練習問題です。6回分ありますが、正解率が80%を超えるまで約3回ずつ繰り返しました。練習問題の難易度としては実際の試験よりやや難しかったかなと思います。

結果と感想

約1ヶ月かけて準備し、点数はかけた時間の割には高くない820点でした。笑 (ちなみに周りの先輩や同期は1、2週間で取得できたという話を聞いたので、だいぶ時間がかかった方だと思います。)

思ったより時間がかかった原因としては、CLF-C02になったから不安だった、ノートに時間をかけすぎた点が考えられます。

まずCLF-C02になったから不安だったという点ですが、最初はCLF-C01を目標にしていたのが間に合わずCLF-C02を受けることになったというところで、新しく追加された出題範囲に関してはどのくらい理解すべきかが分からず、結果的に新しい範囲の勉強に割と多くの時間を使うことになりました。ただ、出題の割合としてはもちろんEC2、S3といったAWSの中心的なサービスに関する質問の割合が高いので、今振り返ると、新しいサービスよりはエッセンシャルな部分の理解を深める必要があったと思います。

そしてノートに時間をかけすぎた点ですが、勉強を始めた直後は、後で見やすいように全範囲に対してノートを取ろうという大変なことをしようとしてたのです。もちろん出題範囲からして短期間ですべてのノートを取ることは難しい&効率が悪いことに気づき、途中からやめて練習講座の資料を元にメモを追加する方向に転換しました笑。最初から資料を活用したら少し短縮できたかなと、今になっては思います。

こうやってようやくCLFに合格したのですが、CLFを合格した時点ではAWSの各サービスが何をするのかについての知識が得られただけなので、本当にAWSを使えるようになるにはAWS Certified Solutions Architect(AWS-SAA)などの上位資格の取得後になるのではないかなと思います。

まとめ

AWSの基礎を学び、上位資格の取得を目指すための第一歩として、AWS-CLFの取得はおすすめです!

感想の部分でも話した通り、まだCLFを取得した時点ではAWSを有効活用することができないので、続けてSAAの取得に挑戦するつもりです。 ただ、今回の私の勉強法は少しコスパが悪かったと思うので、この件を反面教師として次からは効率的に勉強していこうと思いました。

最後まで読んでいただきありがとうございました!

新卒による、CNTOM2023登壇の振り返り

この記事は、BBSakura Networks アドベントカレンダー 8日目の記事となります。

こんにちは、BBSakura Networks株式会社 の清水です。普段はモバイルコアの開発などを担当しています。

先日、CNTOM2023のスポンサーセッションにBBIX株式会社として登壇させていただきました。

今回は、登壇発表の内容紹介と振り返りをテーマにしてお伝えさせていただきたいと思います。

発表内容について

CNTOM2023 発表資料の表紙。タイトルは、”モバイル未経験から新卒配属5か月でモバイルコアとSIMの開発運用で活躍してる話”
モバイル未経験から新卒配属5か月でモバイルコアとSIMの開発運用で活躍してる話

cntom.jp

モバイル未経験から新卒配属5か月でモバイルコアとSIMの開発運用で活躍してる話、というタイトルでモバイルコアの開発という自分にとっては未知の領域である業務内容について、どのように勉強をしながら進めていったのかについてお話ししました(自分で活躍って言ってるのは少し面映ゆい気持ちになりますw)。

なお、発表時の資料につきましては、上記リンクのCNTOMのページ内にて後日公開予定です。あわせてご覧いただけたらと思います。

CNTOM2023発表資料より、初タスクであるUpdate Locationの実装に関する具体的な説明とシーケンス図のスライド。説明内容は以下に記載の通り。シーケンス図は、「Update Location Request」、「Cancel Location Request」、「Cancel Location Answer」、「Update Location Answer」の順番で処理が行われていることを示しています。
HSSの開発(CNTOM2023発表資料より)

初めてのタスクは、HSSにおけるUpdate Locationの処理の実装でした。 簡単に説明すると、これは、ユーザーのデバイス(スマホなど)が新しいエリアに移動した際に、HSSに記録されている位置情報を更新する、という処理です。このような処理を行うことによって、移動中でも接続が途切れることなく通信を行うことができます。

配属当初、自分は

  • モバイルという未知の分野についてどのように勉強を進めていくか
  • フルリモートという環境でどのようにメンバーとコミュニケーションを行えばいいのか

という2点について課題に感じていました。

以前のブログでは、どのようにオンボーディングを行ったのかというテーマの中で、リモートワークにおけるコミュニケーションの方法についてご紹介させていただきましたが、CNTOMではどのように勉強や開発を進めていったのかという内容を中心にお話させていただきました。

blog.bbsakura.net

どうやって勉強したか

自分は、開発に使用しているGo言語にそもそも触ったことがない、という状態からのスタートだったので、まずは A Tour of Go*1で基本的な文法から学び始めました。

また、Update Locationの処理ではDiameter*2というプロトコルを使用するのですが、Diameterも配属してから初めて知った、という状態だったのでこれも1から勉強しました。

加えて、LTEのアーキテクチャや、Update Locationを含むInitial Attatch*3 についてチームの方に教えていただいた上で、実装を始めました。

Update Locationが具体的にどのような処理を行っているかは、3GPPを読むと書いてあります。 しかし、じゃあそれを読んでその通りに実装しよう、というのは初学者である自分にとっては難しいことだったので、実装は過去に書かれたモバイルコアのコードも参考にしながら進めていました。過去のコードと3GPPの記述を比較することで、3GPPに書かれている内容がどのように実装すればいいのかを把握しやすくなりました。

開発を進める際に意識したこと

1つの処理 → 1つのテストパターンという順番で開発

これは習熟度によって様々な方法がありそうですが、自分は不慣れな言語で一気に実装を進めた場合、エラーが発生したら原因の切り分けが大変そうだなと考えていたのでこの手順で実装を進めました。

コードをきれいにする工夫は後回し

これもエラー時の原因をわかりやすくするという目的です。長い処理を関数として切り出すなどは、最終的に保守性の高いコードを作るためには必要なことですが、一旦後回しにして開発をすすめ、後から関数として分けられそうなところは分ける、という手順で進めていました。

Working Out Loudで進捗を見える化

以前の記事でも紹介させていただいた、仕事の進め方に関する方法です。 Working Out Loudとは、自分の作業・学習内容・疑問点を共有しながら仕事を進めていくという手法で、自分はSlackに自分用のTimesチャンネルを作成し、そこで業務の進捗を共有していました。

進捗を共有することで、悩んでいる際などはチームメンバーからもアドバイスをもらいやすくなり、スムーズに仕事を進めることができました。

これまでの成果

CNTOM2023発表資料より、配属後からこれまでの成果に関する説明のスライド。内容は以下に記載の通り。
配属後の成果(CNTOM2023発表資料より)

HSSの機能を完成させた

配属から2ヶ月目で完成させました。初めてのタスクながらテストコードを含めて1000行を超えるコードを完成させたので非常に達成感がありました。

ソフトウェアにもハードウェアにも携わることができた

HSSの開発以外にも、SIMカードのプロファイル検討や、モバイル通信の検証環境の構築のために物理機器(サーバーなど)にもさわる機会があり、幅広い分野の業務に携わることができています。

いざ、登壇

上記で紹介させていただいたような内容を発表させていただきました。

CNTOMの参加は初めてでしたが、昨年度や今年のプログラムを見ていて、他のセッションの内容と比較するとかなり異なる雰囲気の発表になるだろうなという予感は前日から感じていました。 その予感は、当日に他の方々の発表を見ていて確信に変わり、発表前は非常に緊張していました。

そんな緊張の中で迎えた発表ですが、結果としては反省点を残しつつも無事に終了し、業界の諸先輩方にも温かく見守っていただけてとてもよかったです。また、セッション終了後に行われた懇親会でも、多くの方から良かったよとお声をかけていただきとても嬉しかったです。

余談ですが、この発表はチームのメンバーの方々も現地で見てくださっていたのですが、発表を終えた後、「実は見ている側も緊張していた」という旨のことを言っており、まるで子供の発表会を見守る親みたいなコメントだったので面白かったです。

登壇を振り返って

このように、無事発表を終えることができましたが、今振り返ってみると、

  • 緊張のあまり話す内容を飛ばしてしまい、想定より早く終わってしまった
  • 話の内容・資料の構成に改善の余地があった

など反省点は色々あったと感じています。 特に発表内容の構成などは、このブログを書いている最中でも「こういうことも話したほうが内容が伝わりやすいよな」みたいな点は結構出てきているので、資料作成の段階からもっと入念な準備が必要だったと思います。

また、今回このような登壇のチャンスをもらえたのはとても恵まれていたとも感じています。 IT系の分野ではこのようなカンファレンスが多く開催されていることは知っており、自分もいずれは登壇したいという気持ちはあったのですが、まさか新社会人1年目にしてそのような機会が巡ってくるとは思っていなかったので、話が来たときにはとてもびっくりしたのを覚えています。

自分にとってもチャレンジングな機会でしたが、スポンサーセッションに新卒を送り出すという判断をした弊社もとてもチャレンジングな会社だなと感じました。

30点で打席に立つ

speakerdeck.com

最近、弊社のSlackでシェアされて、チーム内でも度々話題に上がるスライドです(とても素晴らしい内容なので是非読んでみてください!)。

登壇の話が上がった当初は、新卒である自分に発表が務まるのかという不安もあったのですが、このスライドの

その時の自分にとっての80点を目指しながら、「他のすごい人から見たら30点位だろうし不安だな」くらいの状態で踏み出すのが大事

という内容に勇気づけられました。

これからも、30点で打席に立つというマインドを大事にしながらチャレンジを続けていき、新卒というカードがなくても評価されるつよいエンジニアを目指して頑張りたいと思います。

ここまでお読みいただきありがとうございました。

*1:Go言語の公式チュートリアル https://go-tour-jp.appspot.com/

*2:主にモバイルデバイスで使用される次世代の認証・認可・課金情報管理のプロトコル

*3:ユーザーのデバイス(スマホなど)がモバイルネットワークに自身を認識させ、必要な設定を行い、通信が可能な状態になるまでの一連の手順のこと。Update LocationとはこのInitial Attachの中で行われる処理の1つであり、スマホがネットワークに接続されるまでにはそれ以外にも多くの処理が行われている。

NTTや通信業界の歴史を覗いてみて、NTT法の改正を考える

みなさん、こんにちは。BBIX/BBSakura Networksの福智です。

今年のBBSakuraアドベンドカレンダーに載せるBBSブログは今我々の業界で話題沸騰のNTT法の改正についてちょっと考えてみたいと思います。

BBIX社内のSlackに社員の皆さんは通信業界のど真ん中にいるのでこの話題にもちゃんと触れておいてくださいね。と下記記事のリンクを貼りました。

digital.asahi.com

ただ、待てよ。今の20代30代のワカモノたちは、果たしてこの記事を読んだだけでこの問題の本質がわかるだろうか?

もっとNTTの成り立ちから現在に至るまでの背景を理解しないと問題の本質に辿り着けないのではないか?

と考え始め、一度NTTの歴史、民間通信事業者との関係性の経緯をまとめることにしました。

なお、今回の執筆にはBBIX Singaporeの白畑さんに多くをアウトソースしております。

(白畑さん改めてありがとうございます)

日本の電気通信の起こり

日本は明治初期に、電信のためインフラを早い時期から整備してきた。1869年の東京~横浜を皮切りに、1873年(明治6年)には青森~長崎間、1882年にはほぼ全国主要幹線網を整備している。

またベルの発明した電話は発明の翌年に輸入するなど、最新の技術の導入と国産化に積極的であった。当時のインフラの担い手は政府(工部省、逓信省)であったが、一部では私設電話などの民間によるインフラ整備や、鉄道における通信インフラの整備も行われた。

電信

  • 1849年(嘉永二年)、松代藩士・佐久間象山、オランダの書物を参考に電信機を自作、松代で約70m離れた仮住居との間で日本初の電信実験に成功したとされている
  • 1854年(安政元年)、米国のペリーの2度目の来訪時に徳川幕府にエンボッシング・モールス電信機を献上。翌1855年、オランダも受信機を幕府に献上。実用化されないまま明治維新に至る。
  • 1868年(明治元年)、官営に依る電信事業が廟議決定、1869年8月には横浜裁判所(県庁に当たる機関)と横浜燈明台役所間に官用電信線を架設して官用通信の取扱いを開始、同年12月東京と横浜間に電信線を架設し公衆電報の取扱いを開始
  • 1872(明治5)年9月に至り、政府は私設線の架設を禁止し、官営主義に。翌1873年 青森-東京-長崎間が完成し、1882年にはほぼ全国主要幹線網を完成。
  • また1871年(明治4年)、デンマークの大北電信会社(The Great Northern Telegraph. Co.)が長崎~上海、長崎~ウラジオストク間を接続する長距離海底電信ケーブルを敷設。国内網敷設とあわせて長崎に届いた海外からの電報を国内に伝送できるようになる。
  • 1895年(明治28年)、マルコーニが電磁波による送受信に成功、翌年には日本でも実験に着手し、1897年に成功。
    • ※マルコーニのマルコーニ無線電信会社とイースタン電信会社は1929年合併し、ケーブル・アンド・ワイヤレス(CW)に。
    • ※ケーブル・アンド・ワイヤレスの日本法人は現ソフトバンクの源流の一つ。
  • 1908年(明治41年)5月、逓信省が銚子に開設した局とサンフランシスコ航路の丹後丸内に設置された無線局との間で、無線電信による最初に公衆電報を取り扱い。

電話

  • 1876年(明治9年)にアレキサンダー・グラハム・ベルによって電話機が発明
  • 1877年に工部省が電話機を輸入して実験を行い電話機の国産化に着手。逓信省が東京と熱海との間に電話線を架設し、1887年(明治20年)12月に実験に成功、1888年から公用の通信に使用し、更に1889年1月から初めて公衆通信の取扱いを開始。同年3月、電話も官営にする方針となり、電信・電話は共に逓信省で運営。
  • 1890年(明治23年)、逓信省により東京市と横浜市間において電話交換サービスが開始。
  • 以降、第二次世界大戦中・大戦後に幾度か組織再編が行われ、電電公社設立前の時点では郵政省に統合されている。

鉄道通信

  • 1872年(明治5年)に新橋~横浜間での鉄道開業に伴い、3本の裸線を用いたモールス電信を使用して閉塞運転を行ったことからスタートし、信号通信システムとして誕生。
    • ※その後の日本テレコム(現:ソフトバンク)の事業の源流である

電電公社の生い立ち

1952年(昭和27年)に日本電信電話公社法に基づく特殊法人として、郵政省の外郭団体の形態で日本電信電話公社が設立。英文略称はNTT(Nippon Telegraph and Telephone Public Corporation)。

電信電話業務の拡大と電気・通信事業の企業的効率性の導入による更なる公共の福祉に役立つ運用を行うためとされた。

設立の審議の過程において、国際電話業務を分離し特殊会社とする案もあったが、国際電話の別会社化について審議を併行し続ける形で、同公社が国内と国際両方の電信・電話業務を所管することとなった。資本金は電気通信事業特別会計の資産と負債の差額(182億円余り)とされ、全額政府の出資金であった。

1953年(昭和28年)、国際電信電話株式会社法による特殊会社として国際電信電話株式会社(現:KDDI)設立、国際電信電話業務を移管。

NTTの誕生と通信自由化

ここまでの日本の通信インフラの歴史を振り返ると、電信に始まる日本のインフラは官主導で行われてきたことがわかるが、通信の自由化・規制緩和と日本電信電話公社の民営化はインターネットの台頭に大きな追い風となった。

通信の民営化は1980年代の世界的潮流で、元々民間企業により運営されてきた米国を除くと、英国(1984年)、ドイツ(1995年)、フランス(1998年)、オーストラリア(1997年)、イタリア(1996年)に民営化が行われている。

一方、中国の中国電信やシンガポールのSingtelなどは上場し、政府保有株式の一部売却が行われているものの株式の過半数は引き続き政府ないし政府系ファンドが保有している。

日本でも1985年(昭和60年)に公衆電気通信法が電気通信事業法に改正され、日本電信電話公社の民営化、電気通信事業への新規参入、および電話機や回線利用制度の自由化(端末の自由化・通信自由化)が認められた。

これに伴い、1987年(昭和62年)に第二電電(DDI、現:KDDI)、日本テレコム(現:ソフトバンク)、日本高速通信(現:KDDI)の3社が長距離電話サービスに参入。

1986年、政府保有のNTT株195万株が売却。民営化後、NTTデータ(1988年)、NTTドコモ(1991年)、NTTファシリティーズ(1992年)、NTTコムウェア(1997年)が設立されている。

コロケーション、ダークファイバーの開放

1997年11月には、接続約款にコロケーションの条件が規定され、NTT以外の通信事業者がNTTの局舎に通信設備を設置する際のルールが明確化された。

今日では義務コロケーション(略して義務コロ)として呼ばれるもので、他の通信事業者もNTT東西の設備を合理的な価格で利用できるものである。

まさに当時の審議会の報告書にある通り、「電気通信事業者間の相互接続において、加入者回線を相当な規模で有する事業者のネットワークへの接続は、他事業者の事業展開上不可欠であり、また、利用者の利便性の確保という観点からも当該ネットワークの利用が確保されることが不可欠である一方、事業者間協議に委ねた場合、合理的な条件に合意することが期待しにくい構造となっている」と指摘されている。

要はNTTのインフラやラストマイルの回線設備の開放なしには競争が生まれにくく、かといってNTTと他の通信事業者の協議に任せるとNTTに有利な条件しか提示されない構造があった。

実際、2000年時点では、NTT東西が加入者回線の99%を占める独占状況にあった。

NTT再編

1997年、競争上の問題(内部相互補助や情報流用など)に対して行政行為のみでは根本的に対応ができないことから、NTT法が改正され、1999年7月にNTTは持株会社の日本電信電話株式会社、競争的部門として長距離通信を担うNTTコミュニケーションズ、独占的部門として地域通信を担うNTT東日本、NTT西日本の4社に分割された。

ここでのポイントは、地域電気通信網への接続にあたりNTTコミュニケーションズはDDI、日本テレコム、KDDI(いずれも当時)などの長距離通信を担う事業者との条件の同等性確保にあった。

一方、当時はインターネットや携帯電話が今日ほど発展しておらず、各事業者ともに電話による音声収入が大きく、また産業構造としても外資系OTT事業者の存在が小さかったことが昨今のNTT法に関する議論の背景にある。

ISDNからADSLへ

NTTは当初、マルチメディア全盛の1990年代、ISDNからFTTHへの移行を考えていたが、1995年のWindows95を皮切りにインターネットが爆発的に普及。高速な通信回線に対するニーズが高まっていった。

NTTは1997年ごろ、ISDNへの干渉や電話局からの距離による速度低下などを理由にADSLに対して否定的な立場をとっていたが、1999年にはNTTに対して「ドライカッパー」(未利用の電話回線=銅線、ないしは利用されていない帯域)の開放が義務付けられた。

これにより、NTT以外の通信事業者がNTTの電話回線に利用されている銅線をそのまま利用可能なADSLによるサービスを開始。NTTの電話網を使ったADSLサービスが1999年12月20日にコアラが大分市の一部で、また東京めたりっく通信によって2000年1月に東京23区内の一部を対象に商用ADSLサービスが開始した。

一方、NTT東西も1999年12月からADSLの試験サービスを、2000年12月26日に商用サービスを開始している。

その後、2001年6月に2001年6月ソフトバンクの子会社のビー・ビー・テクノロジーとYahoo!JAPANがADSLサービスYahoo!BBを発表し、当時破格の金額である最大8Mbps、2,280円で話題を集め、9月にサービスを開始した。また当時経営危機に陥っていた東京めたりっく通信をソフトバンクが買収している。

さらに、ADSLだけではなく、ブロードバンドの本命である光ファイバーに関してもインフラの開放が進められた。

NTTはそれまでは光ファイバーを他の第1種通信事業者(当時)に貸し出す義務はなく、2000年12月当時の電気通信審議会の答申によれば「(光ファイバへの)接続の請求への拒否が行われるなど円滑な接続が実現していない」「今後高速サービスの提供のための基幹的な位置づけを持つ、 不可欠設備である光ファイバ設備が適正な条件で提供されない状況が生じている」として、NTTだけが歴史的経緯で公的資金を活用して建設された資産を含む光ファイバーの全国網を有しているにも関わらず、他の通信事業者がそれを事実上、事業活動に利用できないことにより通信事業者間の競争が阻害される構造が生じていた。

これのような状況を受け、総務省においてルールの見直しが行われ公平な約款ベースで光ファイバーを貸し出すことになり、卸電気通信役務制度に組み入れられた。

また、NTT東西が所有する光ファイバーに光信号を通してNTT東西の通信サービスに活用する、いわばセット状態での利用しか事実上できなかったが、光の通っていない状態の光ファイバー(ダークファイバー)を他の通信事業者が明朗な条件で借り受けることができることになった。

こうして、2000年12月27日には、NTT東西が光ファイバー網のアンバンドル提供条件を示し、2001年4月にはダークファイバーへのアンバンドルが行われ、9月には接続約款に接続料が規定された。この結果、加入者ダークファイバーを利用して法人向けブロードバンドサービスを開始したのがソフトバンクネットワークスの子会社のアイ・ピー・レボリューションである。

その時の同社社長がNTT初代社長の真藤 恒氏の三男である真藤 豊氏であり、取締役技術統括が私、福智道一でした。

また同時に、NTT東西がインターネット接続用に構築したネットワーク(地域IP網)もルーティング伝送機能として併せてアンバンドル化および接続料設定がなされ、

今日の日本のインターネットのアクセス回線の大部分の基礎となっている。

モバイル時代におけるNTT設備のアンバンドル

日本の大手モバイル事業者3社は、全国にわたる広い地域において4Gの800MHz/900MHzで軒並み99.7-99.9%の人口カバー率を実現している。

実はこれらの多くを支えているのはNTTのインフラである。

日本国内の大手モバイル事業者は携帯電話の基地局とコア設備を接続する回線の多くにNTT東西の光ファイバーを利用している。

特に人口密度の低い地域においては、敷設されている光ファイバーがNTTだけであるケースが多く、光ファイバーなどのインフラを複数社で利用することで投資の有効活用が図られ、日本国内のデジタル社会のインフラを支えている。

今議論されているNTT法の見直し論について

現在、NTT法の見直し論が盛んに議論されている。

過去の議論を振り返ると、NTTは他の通信事業者に対して事業が成り立つ条件での光ファイバーの貸し出しに消極的な対応してきた経緯や、財産権を盾に開放義務の縮小を図る議論があった。

一方、総務省の規制は通信事業者間の競争による電気通信事業の発展とインフラの効率的な投資を促してきたといえよう。

特に日本の都心部や一部のデータセンタ集積地を除く、日本の国土のほとんどの地域でNTT東西のダークファイバーや義務コロケーションは、過剰投資を抑制しつつ、全国にインターネットを広げるというデジタルデバイドを解消する上で大きな成果を上げてきた。

これには国が大株主として間接的なものも含め一定の影響力を及ぼしてきた側面があるといえよう。

例えばソフトバンクの孫正義社長は2000年代初頭、IT戦略会議においてNTTのインフラの開放を要求してきた。

純粋な民間企業であれば株主利益や財産権の観点からは拒絶することが想定されるが、当時は政府が株式の46%を保有してきたこともあり、e-Japan戦略など超高速インターネットの普及という国策を推進する観点でも協力をせざるを得なかったとも言えよう。

例えば、東南アジアのある国(インドネシア)では事業者が経済合理性のある価格で光ファイバーを提供しないことから、多数の事業者が自社で光ファイバーを埋設し、通信インフラのコストが高止まりする原因となっている。

しかしながらファイバーの埋設ルートが同一であるなどコスト増が信頼性の向上に繋がっていない。

光ファイバーや通信局舎などのボトルネック性のあるNTTのインフラ利用に対するガバナンスと共有(シェアリング)促進が、少子高齢化が進む中でこれからも持続可能な形で日本の津々浦々に広がるモバイル網、インターネットを支える重要な鍵である。

利益を追求する株式会社としての組織形態においてユニバーサルサービスをどう支えていくかが、NTT法見直しの一つの大きなテーマである。

参考資料

転職って意外と楽しかった話

自己紹介

初めまして!OCXのネットワーク(以下「NW」と書きます)担当の尾辻と申します。
今年の5月からBBIX及びBBSakuraに入って早半年以上が経過しました。
主にOCXのCloud ConnectionのNWの構築や社内の検証業務を担当しています。
唐突に趣味の話ですが、最近は車にハマってます!(買うのも乗るのも見るのもです)
限られた人生でどれだけ好きな車に乗れるかを日々考えてます汗

転職について書こうと思った理由

早速ですが、転職についてきっかけとかやったこととかをこのブログに残そうと思います。 なぜ今回このテーマにしたか、以下の理由になります。

  • 自分の場合初めての転職は過程とかやることのイメージがつきづらかったかったので、少しでも当記事で助けになれればと思ったから

  • 転職は面倒だったり億劫では意外とないよ!ということを伝えたかったから

  • 転職でつまづいたところとか失敗もあったので情報共有したかったから
    などなど・・・

きっかけ


前職ではNWエンジニアとして主にCisco機器に関するNW構築関係の仕事を約4年ほどしていました。
コンフィグの設定や構築設計に携わるのはとても自分の肌に合っていましたし、達成感や充足感はあったのですが、ある日もっと自分のやれる業務の幅を広げたい!と思うようになりました。というのも、当時の職場で目標にしていたNWエンジニアの方がいたのですが、その方も職場の環境を変えることで成長していった過去があったからです。環境を変えることで今の職場では得られない経験や視野を広げて自分のNWの世界も広げたいと思うようになりました。

過程

自分の転職方法は以下の選択肢からまずは考えました。

  1. 転職エージェントを使う
  2. 企業に直接応募する
  3. 知人や友人に紹介してもらう
  4. SNSを使う

よくある方法は一番目の転職エージェントを使うかと思います。
自分も最初登録してエージェントの方とやり取りしましたが、自分の場合エージェントの方任せになってしまい、主体的な転職ができていないと気づきました。例えば紹介された企業様の条件に本当に自分がマッチしているかどうかを考えることが先になり、自分で選択ができませんでした。
そこで友人にLinkedInに登録してみたら?というアドバイスをいただき、実際に登録しました。上記の4番目のSNSを使う方法になります。LinkedInはプロフィールと自分の職歴を簡単にまとめて、その内容を見た企業様から直接繋がれるというSNSです。実際に登録後色々な企業様からメッセージが届き、LinkedIn上でメッセージやビデオ会議でやり取りをしました。そこで直接キャリアの相談や自分がしたいことを伝えることができました。今思えば転職がうまくいったのはこの経験だと思ってます。応募を行うことよりも、まずは自分が携わりたい業界のことを直接関連企業様へ相談することによって学ぶことが大事だったと思っています。また、自分の将来のキャリアを考え自分自身で発信することはとても楽しかったなと今振り返って思っています。
結果、自分が考えている将来のキャリア像に近い方の転職サポート実績のあるエージェントの方と知り合うことができ、ソフトバンク株式会社(※転職後BBIX/BBSakuraへ出向)をご紹介いただきました。

転職活動中の失敗

自分はリモートでの面接は人生で初めてでした。
前職ではリモートで業務を行っていたので、同じように面接も臨めば大丈夫!!・・・と思っていたのは甘かったです。
なぜなら質問に対する返し方や雰囲気の掴み方が対面での面接とはまるっきり違うものだからです。
例えば、転職面接では業務内容について面接官の方に説明するかと思います。対面だと説明中の面接官のリアクションや細かな表情によって、「この説明は伝わっていなさそうだから以降の表現は変えようかな」と思ったり、「この説明の反応は良さそうだから重点的に詳しく話そう」といった対応ができます。しかしリモートでは細かな空気感とか雰囲気であったり、面接官同士のやり取りまでは分かりません。結果として自分の説明が長話になったり、伝えたいことを言いそびれてしまったことが何度もありました。
そこで自分はリモート面接では対面の面接よりも自分の説明中は少しだけ多めに面接官の方に確認をとることをおすすめしたいです。説明がちゃんと伝わっているかどうかをこまめに確認したり、的外れな回答になっていないかどうかを言葉で確認して判断した方がお互いに幸せになれると思います。(当然確認が多すぎるのも時間がかかるのでNGだとは思います。)

ソフトバンク株式会社へ転職し、BBIX/BBSakura出向した後について

自分に合っている職場環境で、日々成長できていると感じています。
なぜなら弊社はフルリモートで働く前提であり、自律的に動くことが求められる環境のため、自身の成長は不可欠だからです。弊社では成長のための支援が整っており、やりたいことを自由にさせてもらえるため、結果自己の成長に繋がっているのではないかなと思っています。
また気軽にコミュニケーションを行うことができるので楽しく働くことができています。
以下BBSakuraの採用ページです!少しでも興味持っていただいたらこちらから応募できますので是非ご覧ください!
www.bbsakura.net

まとめ

最初は不安で億劫だった転職も、今振り返ればステップアップとしてやってよかったなと思ってます。
気軽にとりあえずやってみる精神で転職するのもいい経験になるのはないかなと思います。

技術の勉強は今からでもできるし、これからもやり続ける話

はじめにと自己紹介

BBSakura Networksアドベントカレンダー2023の5日目の記事です。

皆さまこんにちは、はじめましての方ははじめまして。 OCXのバックエンド開発を行っている渡邉です。以前、下記の記事を執筆させていただきました。 blog.bbsakura.net

アドベントカレンダーの執筆ということでに大急ぎで書いております。 今回は「エンジニアが行う勉強について」について自分なりの方法や考え方についてのエントリです。

この記事を書こうと思ったきっかけ

前回書かせて頂いた記事の通り自分はネットワーク業務に従事するのは弊社で初めてです。 また担当しているOCXのバックエンド開発にはGo言語を使用していますがこちらも業務でもプライベートでも触れたことがない言語でした。 つまり弊社に入社するにあたり転職時点では弊社で求められる技術スキルはほとんど無い状態でした。

また、他職種の友人から「よく未経験歓迎ってあるけど、本当にエンジニアなれるの?」や「エンジニアってなったあとも勉強しないといけないんでしょ?」と質問されることがありました。

このあたりの出来事から自分の振り返りも含めて「どういう勉強をしたのか」、「入職後もどれぐらい勉強が必要なのか」を記事にしたいと思いました。

1. どういう勉強をしたのか

そもそもエンジニアになるためにどういった勉強をしたか、という点でいうと私は高校卒業後、大学には行かず技術系の専門学校に入学しました。 この時点では学業での習得がほぼすべてで学業以外でなにか開発をしたりするということはしませんでした。 就職後は様々な開発案件を行い、学業で習得した技術スキルが業務(実践)で使う技術スキルに昇華していった気がします。 当然、業務をこなしていくとこれまで自分が知らない技術スキルが求められたり、会話の中で出てくることがあります。 こういった「ベースはある程度理解しているが、わからないモノ」が出てきたときはやはりインターネットで調べることが多いです。

次に「ベースも知らない新しい技術スキルを習得する場合」ですが、取っ掛かりは書籍(電子ではなく紙)から入ることが多いです。 実際、弊社に転職してくる際に面接担当の方から「業務で使っている言語はGo言語だけどやったことありますか?」と言われ「無いので有給消化期間中に勉強しておきます」というやり取りがあり紙の書籍を購入し勉強に利用したのがこちらです。 gihyo.jp タイトル的には「1日で基本が身につく〜」ですが、自分はこれを1ヶ月程度かけて読み切りました。 ただし、漠然と読むのではなく写経(実際に書籍内に記載されている実装を打ち込む)して仕組みを理解しながらです。 当時、自分が業務でも使用したことがあり知っていた言語(javaやC#)と照らし合わせたときにGoはどういったものなのかを理解しながら読み進め、写経していきました。 実際に読み進め書籍の記載だけじゃわからないところはインターネットで調べたりしながら理解を深めていきました。

普段の開発業務の中でも実装に詰まったときにインターネットから良さそうな実装を見つけて参考にすることは皆さんもあると思いますが、 自分は必ずただそのまま写すのではなく、必ず仕組みを理解してから参考にしています。

2.入職後もどれぐらい勉強が必要なのか

これはどれぐらい必要かという観点だと自分の答えとしては「エンジニア職であり続ける限り必要」だと思います。 昨年、X(旧Twitter)でバズったこちらのポスト、見覚えのある方もいると思います。

www.kyoiku-tosho.co.jp 先日、この教科書を自分も購入して、いまの中学生が技術の授業でどういったことを学んでいるのかを知りました。 読んだ感想としては率直に「いまは義務教育でここまで学ぶのか」と驚きました。 学校で先生をやっている知人から「最近はとにかく教える内容が多岐に渡っていて教える側も理解してないといけないから大変だ」という話を聞きましたが、技術分野だけ見てもそれが見て取れました。 それこそ「自分、未経験なんですがエンジニアになれますか?どういった勉強すれば良いですか?」という人がいたらまずこの教科書を読んでみてください、と自分は言うと思えるほどの内容量の充実さです。 少し大袈裟に言うと自分が情報系の専門学校に入ってから学んだ内容に近いことが今は中学生の教科書に書いてあります。

少し話がそれましたがどうして自分が「エンジニア職であり続ける限り必要」と思っているかというと、昨今の技術革新は物凄いスピードで進んでいます。 と同時に上述のように中学生(義務教育)の時点でエンジニアの基本を学んでいる子供がいて、将来彼ら彼女らが高校、大学、専門学校とより高度な情報技術を学び、エンジニア業界で働き始めた時「自分自身がその時代の新しい技術に関する知識を習得しているか」は非常に重要なポイントだと思っています。

おわりに

今回は自分がどうやって勉強しているかの簡単な紹介と、今後もどう勉強していくのかについての自分なりの考えを記事にさせていただきました。 ただ、これらに関しては人の数だけ考え方や答えがあると思います。本記事を読んでいただいた皆さまの考えの一助になればと思います。

テクノロジーを意識しなくてよい世の中へ。〜ゴールから考えるエンジニアのあり方〜

突然ですが、
「なぜ人々は、人間と技術を対比したがるのだろう」
そう考えたことはありませんか?

こんにちは。BBSakura Networks エンジニアのmakiです。この記事はBBSakuraのアドベントカレンダー12/4の記事です。

adventar.org

私はSFな世界観が好きで、いろんなものがネットワークを介して繋がっていたり、人体が機械と融合したりしている作品が好きです。
SF作品では多くの場合、発展しすぎたテクノロジーと人間が相対する構図が描かれます。物語では、時に人間は、自らが開発したテクノロジーによって反逆を受けたり、地球外のテクノロジーによって攻撃を受けたりして存在を脅かされます。

際、テクノロジーは人間のためにある方がずっとよいと思います。テクノロジーは、電子レンジのように、その仕組みを知らない人でもボタン一つで目的を果たせるような、使うのに簡単なものであってほしいです。しかし、現実のテクノロジーは人を困らせることがたくさんあります。

  • 便利だとわかっていても設定が面倒でサービスを使えていない。
  • やりたいことはイメージできているのに、ツールの操作ができない。

では、私たちはどのようにすれば、テクノロジーを人間のために活用することができるのでしょうか。

その答えの一つは、テクノロジーがあることを「意識しなくてよい」ようにすることだと思います。 テクノロジーを「使いこなす」のは、人間にとってとても難易度が高いことです。 テクノロジーは複雑で、その仕組みを理解するのは容易ではありません。また、テクノロジーは常に進化し続けており、人間はテクノロジーを使いこなすために、多くの時間を費やす必要があります。 テクノロジーがあることを意識しなくてよい世の中とは、テクノロジーが人間の日常生活に溶け込み、人間がテクノロジーの存在を意識することなく、自然にテクノロジーを活用できる世の中だと思います。

は、具体的にどのようにすれば、テクノロジーがあることを意識しなくてよい世の中を実現することができるのでしょうか。 一つ、テクノロジーを舞台の黒子のように考えてみます。黒子とは、舞台上で役者をサポートする役割を担う役者のことです。黒子は、役者の動きを妨げないように、目立たないように配慮して演技します。テクノロジーも、黒子のように、人間の活動を妨げることなく、人間の意思のシナリオに沿って動作することが理想だと思います。 もう一つの考え方として、テクノロジーを「馴染みのもの」にすることが挙げられます。テクノロジーは、人間の生活に溶け込み、人間にとって馴染み深いものであってほしいです。

例えばこんなテクノロジーはどうでしょう。

  • 人間の意思を直接理解して、その意思に沿った行動を自動的に行うテクノロジー
  • 人間の思考を補助して、人間の創造性を高めるテクノロジー
  • 人間の身体に直接組み込まれたテクノロジー
  • 人間の生活環境に溶け込んだテクノロジー

このようなテクノロジーが実現されれば、人間はテクノロジーを意識することなく、自然にテクノロジーを活用することができるようになりそうです。

て、このようなテクノロジーがある未来を作るには、私たちエンジニアは何をすればいいのでしょう。 一つは、テクノロジーの安全性と信頼性を確保することだと思います。とくにこれから先のテクノロジーは、スタンドアローンというよりむしろ相互接続によって成り立っていくでしょう。ここでいう「相互接続」とは、ネットワークのレベルでの相互接続だけでなく、アプリケーションレベルやサービスレベル、さらにはサービスの上のサービスレベルまで、すべての技術単位での相互接続です。テクノロジーを使って人間に「楽しい体験」をしてもらうために、エンジニアはこれらのレベルどうしのインターフェース(接続ポイント)を構築していくことを繰り返します。テクノロジーの安全性と信頼性は、技術単位自体の安全性と信頼性のみならず、インターフェースの安全性と信頼性も大切になってきます。

もう一つは、すべての仕事にクリエイティビティを忘れずに楽しく取り組むことだと思います。「こうありたい」と思った未来に少しでも近づくため、自分にできることはないでしょうか。その未来は、世界の未来でも、自分の未来でもいいと思います。テクノロジーは少しづつに見えても、確実に進歩しています。テクノロジーが人間のために活用されている未来をみんなで実現しようとしているときに、少しでも幸せな人が多くいてほしいです。幸せであるために、楽しく、爪痕を残しながら仕事をするのもエンジニアにとっての重要な選択肢の一つになりえます。

回タイトルにした「テクノロジーを意識しなくてよい世の中へ。」は、私の仕事の軸でもあります。その背景には、IT格差の現状を見たり、未来を不安に思う人々の声を聞いたりしたことがあります。エンジニアはテクノロジーが好きな人たちの集団です。もしこのビジョンを読んでくれた人の中で興味を持った人がいたら、一緒に働けたら嬉しいです。

エンジニアのみなさんと楽しく、一緒に未来を作っていけたらなと思います。

maki