経験に触発され、新しい友人やビジネスパートナーを見つけ、最新のニュースやトレンドを見つけ、志を同じくする人々とのコミュニケーションを単に楽しむように提案されました。 どうしてそのような申し出を拒否できますか? したがって、私たちは北隣の首都に行きました。
ミンスクでは、暗い天候と厳しい国境警備隊に迎えられました。 手続きを終えた後、私たちは市の中心部、会議会場に向かいました。 私たちの前には2日間の興味深い報告とコミュニケーションがありました。
このカンファレンスは、フロントエンド、ハイロード、モバイル、セールスの4つのストリームで開催されました。 約700人の参加者が参加し、40人のスピーカーがそれぞれの経験を共有しました。 そして休憩中、スポンサー企業はクアドロコプターをプレイしましたが、ITイベントではクアドロコプターがいなかったでしょう。
私たちは、フロントエンド開発者として、主にフロントエンドストリームに興味があり、実際にこの2日間に訪れました。 すべてのレポートは興味深いものでしたが、私たちの意見では最も興味深いものを選択しました。
1日目
Konstantin Krivlenya、「フロントエンドの継続的統合」( スライド )
Webでの技術の発展により、プロジェクトはより複雑になりました。 ここで、プロジェクトを開始するには、多数の依存関係をインストールし、ビルドがビルドされるのを待つ必要があります。 アプリケーションをエラーなしで信頼性が高く開発しやすくするために、コードをテストする必要があります。 最後に、プロジェクトをユーザーに配信するには、上記のすべての手順を完了して、サーバーにコードを配置する必要があります。 これらはすべて、継続的な統合および配信システムによって簡素化された日常的な操作です。
Konstantinは、FTP経由でサーバーに接続し、そこでファイルをコピーしたり、必要に応じて編集したりした昔の話から始まりました。 次に、変更は同僚の機能にバグを生成し、その逆の場合、スピーカーはチームで作業する問題、つまり作業結果のマージに触れました。 彼は、これらの問題を解決する一般的な方法を、プロジェクト用のコードアナライザーのグローバル構成やテストの作成などで共有しました。 コードをコミットする前にすべてのチェックを行う必要があります。Git自体はgitフックを使用して支援できます。
しかし何よりも、アセンブリおよびテストプロセス全体を継続的インテグレーションシステムに任せる必要があります。 これにより、作業中のマシンをロードせず、すべてのアーティファクトを1か所に保持できます。 レポートでは、 Travis 、 Jenkins 、 Concourse.ci 、 Circleci 、 Teamcityなどのシステムに注目しています。 それらのすべてには、独自の利点と欠点があります。 たとえば、Travisは、プロセスを段階的に分割できる新しいアセンブリマトリックスにもかかわらず、Jenkinsよりも読みやすいログがまだありますが、Jenkinsのインターフェイスははるかに便利ではありません。
結論として、コンスタンチンは、継続的統合システムを使用することの利点と欠点に注目しました。 肯定的な側面は次のとおりです。
- バグの早期発見。
- 長期にわたるリリース、常緑ビルドの回避、およびその結果としての期待。
- アセンブリアーティファクトは常に1か所にあり、必要に応じてそれらを調べるのが便利です。
- チームでの規律の接種。
- 継続的デリバリーへの一歩。
- コードメトリックを簡単に取得する機能。
ただし、CIにはいくつかの欠点があります。
- そのようなシステムを構成する必要がありますが、これは困難な場合があります。
- 常に実際の状況を反映しているわけではありません。 テストにエラーがないことは、アプリケーションの動作を保証するものではありません。
- 大規模プロジェクトでの長い応答。
- システム自体の不安定性; 失敗したテストではなく、ビルドエージェントの障害が原因でビルドがクラッシュする場合があります。
Denis Radin、「JavaScriptへのNASAコーディング標準の適用」( スライド )
Denisのレポートは常に興味深いトピックに触れていますが、今回は非常に興味深いが重要なトピックを取り上げました。JS開発者が宇宙船や航空用のソフトウェアを書くことを信頼していないのはなぜですか? 彼はまた、この状況を修正する方法について推測することを提案しました。
スピーカーは、将来、すべてのインターフェイスがHTML / CSS / JSで記述されることを提案しました。これは現時点では、これがインターフェイスを開発するための最良の束だからです。 ただし、多くの長所と短所があります。 これには、ネットワークアクセシビリティ、簡単にアップグレードおよび共有できる機能、信頼性、およびかなり大きなコンポーネント市場が含まれます。 ただし、パフォーマンスの低下、メモリリークのリスクなど、多くの重大な欠点があります。
フロントエンド開発者として、JavaScriptを実行している飛行機で飛行することは決してありません。 そしてすべては、私たちの仕事はエラーの価格が非常に低いため、安全性の低い安定したコードを書くことができるからです。
ただし、将来このニッチを獲得したい場合は、コードを記述するための新しい標準を導入する必要があります。 デニスは、NASAとジェット推進研究所が宇宙船をプログラミングする際に従う規則を確認し、JSに適用しました。
- 一つの機能は一つのことです。 小さな関数は、読み取り、再利用、テスト、リファクタリングが簡単です。
- 予測可能性 。 「クールなコードを書くのをやめて、シンプルで予測可能なものを書き始めましょう。」 コーディング標準を定義し、コードアナライザーを使用して、メトリックを収集します。
- RAMを尊重します 。 今日、SPAアプリケーションは、ページをリロードせずに数時間動作できます。 ガベージコレクターがどのように機能するかを知り、その仕事をするのを助ける必要があります。 ブラウザの開発者ツールを使用して、メモリリークがないかアプリケーションを調べることも必要です。
- すべてのサイクルには上限が必要です。 このルールはJSコードで解釈するのが難しく、私たちにとってはアンチパターンです。柔軟にしたいのです。 静的分析の貯金箱ではこれがプラスだとしましょう。
- アプリをよくテストします 。 関数ごとに少なくとも2つのテストが必要です。 システム内の異常を追跡および調査し、コードカバレッジを測定します。
- 共有状態なし 。 これにより、予測不能な結果が生じる可能性があり、これはパラグラフ2と矛盾します。
- 返された関数の値を確認します 。 非実用主義の観点から最も軽視されているルール。 たとえば、Math.roundが実整数を返すたびにチェックするわけではありません。
- 転送されるコードの量を制限します。 トランスパイラーが生成するコードを予測することはできません。このコードのパフォーマンスは低下し、アセンブリサイズは増加します。
- 接続を減らします 。 ロジックと状態をカプセル化し、呼び出しチェーンを減らします。
- すべてを緑に保ちます 。 テスト、依存関係、ビルド。 プロジェクトの最初から。
2日目
James Allardice、「Credential Management APIを使用したより良いログインの構築」( スライド )
ジェームズは、サイトの認可の分野における新機能に関する知識を共有するために、霧のあるアルビオンから飛び立ちました。
ログインフォームの表示以降、インターフェイスの変更はあまりありません。すべてのフィールドには、誰が目の前にいるかを判断するためのフィールドもあります。 しかし、ブラウザは、ユーザーがこれらのフォームを操作し、ユーザー名/パスワードを保存し、フォームに自動的に入力し、デバイス間でキーを同期するのを支援し始めました。 また、サードパーティの承認サービスとソーシャルネットワークにより、新しいシステムや使い慣れたシステムにログインする際の生活が簡素化されています。
Credential Management APIは、ログインフォームに入力するブラウザーヘルプの開発における新しいステップです。 次の2つの主要な機能を提供します。
- 開発者にユーザー資格情報へのアクセスを許可することにより、認証を支援します。
- ブラウザがこのデータを保存するのに役立ちます。
これにより、サイトに次のシーケンスを実装できます。
- ユーザーが初めてサイトにログオンする
- データをブラウザのストレージに保存します。
- 次回ユーザーがログインするときに、保存されたパスワードがあるかどうかを確認し、ログインページを表示せずに自分で認証します。
これは安全な技術です。APIが機能するための前提条件は安全な接続です。 同じドメイン内でのみ機能し、ユーザーデータはページで利用できず、ブラウザの内部ストレージで暗号化されます。 そのため、攻撃者がそれらを入手しても、それらを使用することはできません。
おもしろそうですが、実際にはまだ実験的なAPIです。 これの仕様はドラフト段階にあり、APIの根本的な変更のリスクを追加します。これをサポートするブラウザはGoogle Chromeのみです。 また、制限もあります。FetchAPIでのみ機能します。
ただし、非常に限定的なサポートと仕様の初期段階にもかかわらず、新しい便利な機能を使用してChromeユーザーを満足させることができます。 残りのブラウザ開発者が追いつくのを待っています。