シェアオフィス実証実験に参加してきました!
代表の大越です。 2020年もあと1ヶ月で終わりですね。2月に新型コロナ騒ぎが起きてからずっとコロナに振り回され「あっ」という間に1年が過ぎた感じがします。 今回は2020年に一気に広がった「テレワーク」に関する話です。 WYRDでは新型コロナ感染報道が流れたすぐ後の2月中旬頃から基本在宅勤務にシフトしたのですが、いきなり在宅勤務と言われても家庭に在宅勤務する環境がなかったりで、全員が在宅勤務歓迎というわけではありませんでした。 私もそのうちの1人で4人の子供達が全員休校もしくはオンライン授業で在宅となり、自宅で1人静かに仕事をするスペースはベランダくらいしかありませんでした。 私は自宅からオフィスまで5kmくらいだったので、電車通勤を自転車通勤にし、マスクなど感染対策をした上でオフィス勤務していましたが、自宅からオフィスまで遠いメンバーは自転車通勤も難しく、自宅近くに個室コワーキングスペースみたいのないかなと探していたのを覚えています。 今でも近場によさそうなコワーキングスペースないかなとアンテナ張ってるのですが、先日、面白いシェアオフィス実験をするニュースを見つけたのでちょっと覗いてきました。 両国駅3番線にて「N'EX でテレワーク!」を実施します! ~臨時ホームと鉄道車両を活用したシェアオフィス実証実験~ JR東日本では、「働き方改革」を含めた社会的課題に取り組むべく、駅ナカシェアオフィス 「STATION WORK」の拡大を図っており、千葉支社管内においても2020年11月27日(金)以降、順次開業を予定しています。 その取り組みの一環として、両国駅臨時ホームとN’EXの愛称で親しまれている成田エクスプレス(E259系特急型車両)を活用した臨時シェアオフィスの開設を通じて、既存の枠にとらわれない新たな価値やサービスのご提供について実証実験を行います。 — JR東日本ニュースより一部抜粋 普段利用していないホームに遊休電車を持ってきて特急電車の座席で仕事ってことですね。物は試しでとりあえず1.5時間ほど利用してきました! 以下、利用して気付いたことや思ったことです。 ・予約時「成田エクスプレスE」SEAT16 と書いてあったがどこかわからず、受付(両国駅3番線)に戻って聞いたら自由席ですと(先に言って!) ・グリーン席も普通指定席もどこでも自由だったので、それなら当然グリーンに!と思って行ったら全席埋まってて結構密でした。 ・普通自由席は1車両に5,6人くらいだったので密にはなってないから結構快適 ・利用料金は1.5時間で600円(100円/15分) ・車内に電源なかったのは残念。充電はできない。 ・個室ではないのでweb会議などはできない。電話もデッキでお願いしますな感じ。 ・電車の簡易机の上でPCカタカタするので使い心地はお察しな感じ。電車は動いてないから移動中の新幹線内での仕事よりは快適。 ・空調は自動なので自分でいじれず。私にはちょっと暑かった。 ・自動販売機がなく飲み物を途中で買いにいくのが大変。車内かホームに自動販売機を置いて欲しい。 総合的な感想としては、リーズナブルなので今回のように空いてるのであれば短時間での利用はありかなと思います。ただ、最近はzoomなどのWeb会議も多いので、やっぱり個室のコワーキングスペースがいいですね。 快適な新しいワークスペースが見つかったらまた報告します。
ワンライナーをリーダブルにリファクタリング
今回はコードレビュー中に リーダブル コード を思い出すことがあったのでその事例を紹介します。 前提として以下のコードになります。 Webブラウザ で動作する Babel でトランスパイルして minify する とあるプロジェクトで以下の様な JavaScript のコードがありました。(コンテキストが分かりやすいようにプロパティ名等は変更してます) reviewerAttributeNames() { return this.currentProject ? [...Array(this.currentProject.max_reviewers).keys()].map(n => ++n).map(n => `reviewer${n}`) : [] }, よく読めば何をしているのかは分かる気がしますが、読むのに少し時間がかかります。 例えば this.currentProject.max_reviewers の値が 3 だとしましょう。このメソッドの戻り値はどうなるでしょうか? 結果はこんな感じです. [ "reviewer1", "reviewer2", "reviewer3" ] 何となくは結果は想像できますが、途中の過程のコードが読みづらいと思います。 リファクタリング さて本題です。これを リファクタリング していきます。細かく見ると色々ありますが、主要な注目すべき以下の点があります。 三項演算子 を使っている Array.prototype.map() メソッドが 2度呼ばれている [ガード節] Guard Clauses を使う まずは 三項演算子 をなんとかしていきましょう。ここでは リーダブル コード の 7.5 関数から早く返す で書かれている、 ガード節 (Guard Clauses) を使います。ついでに メソッドチェーン をしてるところに改行も入れていきます。 reviewerAttributeNames() { if (!this.currentProject) { return []; } return [...Array(this.currentProject.max_reviewers).keys()] .map(n => ++n) .map(n => `reviewer${n}`); }, ガード節のおかげで条件分岐自体はシンプルになりました。元のコードよりは断然マシです。 ワンライナーを分解 ここでも リーダブル コード の 8.4 短絡評価の悪用 で書かれている. 1行で書かれているコードを分解するテクニックを使います。 鍵となる考え 「頭がいい」コードに気を付ける。あとで他の人がコードを読むときにわかりにくくなる。 スプレッド構文やらArray.prototype.keys()やArray.prototype.map()は忘れて普通に書いていきます。 reviewerAttributeNames() { if (!this.currentProject) { return []; } const { max_reviewers } = this.currentProject; const values = []; for (let i = 1; i <= max_reviewers; i++) { values.push(`reviewer${i}`); } return values; }, 愚直ですがfor文を使うのがベターです。 関数化する レビュー当時はこの1箇所しかありませんでしたが複数箇所あるのであれば関数を用意するのもいいと思います. lodashのtimesを使うのもいいですし、下記のような関数を用意しても良いです. function times(n, iter) { const values = []; for (let i = 0; i < n; i++) { values.push(iter(i)); } return values; } 上記のような関数を用意していればかなりシンプルになります. reviewerAttributeNames() { if (!this.currentProject) { return []; } const { max_reviewers } = this.currentProject; return times(max_reviewers, (i) => `reviewer${i + 1}`); }, それでも ワンライナー が使いたいと思う人へ ワンライナーでも少しは リーダブル にはなります。例えば以下のように書き直すこともできます。 reviewerAttributeNames() { if (!this.currentProject) { return []; } const { max_reviewers } = this.currentProject; return Array(max_reviewers).fill('reviewer').map((v, i) => `${v}${i + 1}`); }, ここで前提を思い出してみましょう。 Webブラウザ で動作する Babel でトランスパイルして minify する ショートコーディングのために工夫したはずですが、 minify までするとこの差はほとんどないと思います。 ちょっと試し書きする感じだと重宝するワンライナーですが、基本的には使わないほうが読みやすくなります。
快適なリモートワークライフを送るために
ご無沙汰しています。 WYRDの豊田です。 コロナの影響もあり出歩くことも少なく、最近はもっぱら Ghost of Tsushima でオンライン協力プレイ(牢人メイン)しています。 弊社メンバー持ち回りでブログ記事を書くことになって早3カ月が経ち、一周回って私に担当が回ってきました。 今年はコロナの影響で田んぼIoTなどのネタも無く、早くもネタ切れ感が否めません。 と言っても何か書かねば... 弊社も2月からオフィスとリモートを自由に選択して勤務できる体制となっています。 当初は**新しい生活様式?**になかなか馴染めず四苦八苦していましたが、最近は週2でオフィス。それ以外はリモートワークというサイクルで安定しています。 むしろ週3でオフィスに行くと、**謎の疲労感に襲われます。**慣れは恐ろしい。 これまで自宅でガッツリ8時間仕事をするなんてことが無かったので、自宅で仕事に集中するための空間を用意する必要がありました。 同じような状況にある人も少なくないのではないかと思います。 ということで今回は、快適にリモートワークライフを送るために私が整えたモノを少しご紹介しようと思います。 イスも仕事の道具でした これは何よりもまず伝えたいことですね。 オフィス勤務をしていたころは全く考えたことがありませんでしたが、座り仕事をするエンジニアにとってイスって本当に重要です。 それまで自宅では5000円程度のノンブランドOAチェアを使っていたのですが、正直8時間も座ってられません。 リモートワークを始めた頃は無理に座り続けた結果、お尻は痛いし、肩は凝るし散々でした。 安定の オカムラ オフィスチェア ということで私が購入したのがオカムラ オフィスチェア ビラージュ(可動肘付き)です。 Amazonで椅子を探していると色々と怪しいブランドのイスが見つかりますが、やはり有名ブランドを選んで正解だったと思っています。 このビラージュは座面が広く、座っていて窮屈さを感じません。この自由度は長時間座る人にとって大事なポイントだと思います。 合わせて購入したのがジョイントマット30×30cm(8枚入り)です。 フローリングだとオフィスチェアのキャスターがうまく回転せず、床もキズがついてしまうので防止目的です。汚れてきたら洗濯できる点も良いですね。 マイクとイヤホンも必須 リモートワークと切っても切れないのがオンラインミーティングですよね。 イヤホンは持っていても、マイクは持って無いと言う人も当時は多かったのでは無いでしょうか。 マイクが入手困難になるなどの現象も記憶に新しいです。 苦労して手に入れたマイクもMacに対応していなかったり、音質が残念なものもあるので、マイク選びには一苦労しました。 結局iPhone付属イヤホンマイクが安定でした iPhoneに付属しているEarPods with Remote and Mic (※1)がしっくりきました。 マイクのクオリティはApple純正品ということもあり、全く問題ありませんし、イヤホンは最近主流のカナル型ではないので、外部の音も結構聞こえます。 (これは逆に結構ポイント高いかもしれません) 最近はセブンイレブンでも購入できるようで、入手するハードルが低いこともポイントですね。 ※1 端子部分はLightningタイプではなく、3.5mm 4極ミニジャックタイプである必要があります。 仕事モードのスイッチを入れるアイテムも大事 自宅で仕事モードのスイッチを入れるためのアイテムも導入しました。 やっぱり自宅にいると仕事以外のことに意識が向きがちになってしまいますからね。 ドリップバッグコーヒーを大量購入 普段自宅ではコーヒーは飲まないのですが、仕事中はコーヒーばっかり飲んでいました。 ということでリモートワーク中もひたすらコーヒーばかり飲むようにしています。 購入したのはドトールコーヒー ドリップパック モカブレンド 100Pです。100杯飲めます。(1杯あたり20円ちょっとなので、コスパも○です) 私の場合、多い時で1日に3杯飲むので2カ月弱は持ちます。 私の場合はコーヒーでしたが、みなさんも仕事モードのスイッチを入れるアイテムを自宅作業にも導入してみるのはいかがでしょうか。 まとめ 今回は、オフィスチェア、イヤホン・マイク(音響設備)、集中するためのアイテムの3つをご紹介しました。 少しでもみなさんの参考になれば幸いです。 他にも細々と色々な試行錯誤をしていますが、それはまた次の機会があればご紹介しようと思います。 生活の場と職場が物理的に近くなることで、いろいろな面で問題が表面化してきていますが、うまく工夫することで自分なりの働き方を見つけられれば良いなと思います。
AWS 踏み台サーバ(ネットワーク)の構築
はじめまして。 本年度入社しました小林と申します。 城に魅了されてしまったエンジニアです。 どうぞ、よろしくお願いします。 今回はちょうど業務でAWSに触れる機会があったため、ネットワークの設定に関して紹介していきます。 要件 以下のような環境を構築します。 踏み台サーバ(Amazon EC2) インターネットから直接アクセス可能 Webサーバ(Amazon EC2)(※今回Webサーバとして公開することは考慮しない) インターネットから直接アクセス不可 踏み台サーバからのみアクセス可能 踏み台サーバとWebサーバは異なるサブネットに所属 サブネットはそれぞれ異なるAZに存在 ネットワークの構成図はこのようになります。 ネットワークの構築 はじめに 用件に見合う構成にするために、以下のサービスを利用します。 Amazon VPC-VPC Amazon VPC-サブネット Amazon VPC-インターネットゲートウェイ Amazon VPC-ルートテーブル Amazon VPC-セキュリティグループ ※VPCは以下の設定で作成し、これら以外はデフォルトの設定を使用することを前提とします。 VPC VPC ID vpc-XXXXXXX IPv4 CIDRブロック 10.125.0.0/16 IPv6 CIDRブロック IPv6 CIDRブロックなし テナンシー デフォルト タグ Name TestVPC サブネット パブリックサブネット(インターネットからアクセス可能なサブネット) 以下の設定でサブネットを作成します。 名前タグ TestPublicSubnet VPC vpc-XXXXXXX アベイラリティゾーン※ us-east-2a IPv4 CIDR ブロック 10.125.1.0/24 ※リージョンはオハイオ(us-east−2)を利用しています。 このままだと、EC2インスタンスを起動した際にパブリックIPが自動で割り当てられないため、自動割り当ての設定を行います。(EC2インスタンスの作成時に割り当てることも可能です。) 該当のサブネットを選択→アクション→「自動割り当てIP設定の変更」を押下 「IPv4 の自動割り当て」をチェック→保存 プライベートサブネット(インターネットからアクセス不可なサブネット) 以下の設定でサブネットを作成します。 名前タグ TestPrivateSubnet VPC vpc-XXXXXXX アベイラリティゾーン※ us-east-2b IPv4 CIDR ブロック 10.125.2.0/24 ※リージョンはオハイオ(us-east−2)を利用しています。 インターネットゲートウェイ VPCの内部とインターネット間の通信を許可するために、インターネットゲートウェイを作成します。 インターネットゲートウェイ インターネットゲートウェイ自体には細かい設定は存在しません。 名前タブ TestIG 作成後、VPCと関連付けます。 アクション→「VPCにアタッチ」を押下 「使用可能なVPC」に対象のVPC(TestVPC)を選択→「インターネットゲートウェイのアタッチ」を押下 これでVPCは作成したゲートウェイ経由でインターネットと通信ができるようになる入り口が用意されました。 ルートテーブル ゲートウェイは入り口に過ぎず、ゲートウェイへのルートを用意する必要があり、そのためにルートテーブルを用意する必要があります。 ルートテーブル 以下の設定でルートテーブルを作成します。 名前タグ TestPublicRouteTable VPC vpc-XXXXXXX 作成したルートテーブルにインターネットゲートウェイを経由する設定を追加します。 対象のルートテーブルを選択→「ルートタブ」を選択→「ルートの編集」を押下 ルートに以下の設定を追加 送信先 0.0.0.0/0 ターゲット 作成したインターネットゲートウェイ 作成したルートテーブルにサブネットを関連付けします。 対象のルートテーブルを選択→「サブネットの関連付け」を選択→「サブネットの編集」を押下 パブリックサブネットのみを選択→保存 セキュリティグループ 最後にEC2への接続を許可するためにセキュリティグループを作成します。 セキュリティグループ 踏み台サーバ用のセキュリテイグループ 以下の設定でセキュリティグループを作成します。 基本的な詳細 セキュリティグループ名 TestSGForBastion 説明 ssh from internet to bastion VPC vpc-XXXXXXX インバウンドルール/アウトバウンドルール タイプ プロトコル ポート範囲 ソース インバウンド SSH TCP 22 0.0.0.0/0 アウトバウンド すべて すべて すべて 0.0.0.0/0 これでインターネット側からのSSH接続を許可しました。 ※必要に応じて接続元を絞ることをお勧めします。 この設定ではどこからでもアクセスできてしまいます。 Webサーバ用のセキュリティグループ 以下の設定でセキュリティグループを作成します。 基本的な詳細 セキュリティグループ名 TestSGForWebServer 説明 ssh from bastion to web server VPC vpc-XXXXXXX インバウンドルール/アウトバウンドルール タイプ プロトコル ポート範囲 ソース インバウンド SSH TCP 22 踏み台サーバ用のSG アウトバウンド すべて すべて すべて 0.0.0.0/0 ソースに対象のセキュリティグループを指定することで、そのセキュリティグループが設定されているEC2インスタンスからのアクセスを許可することができます。 もちろん、IPアドレスで指定することも可能です。 ネットワーク側の設定は以上になります。 これらの設定をEC2インスタンスに関連付けることで、踏み台サーバからのSSHのみを受け付ける環境が完成します。 EC2 インスタンス サブネット セキュリティグループ 踏み台サーバ パブリックサブネット 踏み台サーバ用のセキュリティグループ Webサーバ プライベートサブネット Webサーバ用のセキュリティグループ まとめ 肝となるのは、以下の2点かと思います。 私自身はこの設定が漏れていたことにより、うまく接続することができませんでした。 ルートテーブルとインターネットゲートウェイの関連付け セキュリティグループのソースにセキュリティグループを指定 補足 セキュリティグループに関してなのですが、実はWebサーバ用のセキュリティグループで設定した内容は、VPCを作成した際に作成されるデフォルトのセキュリティグループを指定することで実現が可能です。 しかし、デフォルトのセキュリティグループを使用する場合は、踏み台サーバ、Webサーバ双方に設定する必要があり、双方向の接続が可能になってしまうことに注意が必要です。 セキュリティグループの基本
メグロ(ニックネーム)- 2020年10月16日
コロナとワークライフバランス
こんにちは。芋栗カボチャの季節になりました!! 当番制でブログを記載していこう~となっていますが、遂に順番が回ってきました。何についてのブログを書こうかな~とずっと悩んでいた時、気になる記事をみつけました。 「コロナ禍における政府・省庁の働き方に関する実態調査」 https://work-life-b.co.jp/20200803_6872.html 残業時間、100時間……以上まだまだこのような働き方をしているのが、現実なのかもしれません。 弊社では、新型コロナウイルスによる、緊急事態宣言が発表される前の2月中旬より「在宅勤務推奨」とし、ほとんどの社員が在宅勤務へと移行しました。以前よりWLBの取組で在宅勤務(リモートワーク)を行っていたので混乱なく移行出来ました。日々の取組がこのような時に大変役に立つという事が分かり、WLB推進部の私にとっては大きな自信にも繋がりました。 このコロナウイルスの流行により、今まで制度はあったが、制度を使えるような雰囲気ではなかった企業等、緊急事態宣言をきっかけに、半ば強引にリモートワークに移行した。という企業もあるのではないでしょうか。 慣れないリモートワークで最初は混乱があったかもしれませんが、別の記事でも、「在宅勤務でWLB向上実感」とも記されていました。 自分の時間(家族との時間)が増えた事がWLBの向上に繋がっているのかもしれません。 私自身で考えた時、子供が小さい時は、毎日時間に追われ自分の時間がなく唯一の一人時間は通勤の電車の中でした。ワークについて、ライフについてバランスをなんて考える余裕などなく、とにかく1日のタイムスケジュールをなんなくこなしていくことで必死…そのため、ワークに比重がいくとライフが上手くいかなくなり…ライフに比重を傾けるとワークが上手くいかない…その繰り返しでした。「私には両立は無理かな…」と思い始めた時に、相談した弊社社長から「WLB」という言葉を教わりました。 私がWLBという言葉を聞いてから約10年がたちます。 今は子供が大きくなり、手のかかる事も少しずつ減ってきてはいますが、緊急事態宣言中は学校も休校でしたので、子供とこんなに長く一緒にいるのは育休中以来だったかもしれません。勿論、大変な時もありましたが、私にとっては貴重な時間でもありました。 皆さんは、どうでしょうか。 コロナが収束したとしても、今までのような働き方はもう出来ないのではないか。とも言われています。 「一人一人のワークライフバランス」を考えていく重要さを改めて教えてくれたのかもしれませんね。



