書籍概要

WEB+DB PRESS Vol.125

バックナンバー一覧

発売日
更新日

概要

特集1
作って学ぶプログラミング言語のしくみ
インタプリタ,構文解析器,文法

プログラミング言語のしくみを,プログラミング言語自体を作ることで学ぶ特集です。「言語を作るのは難しい」と考えている人が多いと思います。しかし,プログラミング言語を作るだけならば,想像しているよりずっと簡単です。そして,実際に作ってみることで,どのようなしくみで動作しているのかをしっかりと楽しく理解できます。この経験は,新たに言語を作るときだけではなく,新しい言語を習得するときなどさまざまな局面で役に立つはずです。

特集2
GraphQL完全ガイド
RESTの先へ! フロントエンドに最適化されたAPI

GraphQLは,Web APIのためのクエリ言語です。近年の高度で複雑なクライアントサイドアプリケーションにおいては,REST APIでは通信量が多くなったり,レイテンシが大きくなったりすることがあります。GraphQLでは,そういったケースでも効率的にデータを取得できます。そのため,Facebook,GitHub,Netflixなど,多くの企業が採用しています。本特集では,GraphQLの活用に必要な情報を徹底解説していきます。

特集3
速習DynamoDB
AWSフルマネージドNoSQLの探求

Amazon DynamoDBは,ご存じAmazon Web ServicesのNoSQLデータベースサービスです。フルマネージドなので機材管理の負荷なくスケールでき,パフォーマンスも自動で最適化されるなど,開発チームにとってはサービス自体を良くする作業に集中できる点が魅力です。とはいえ,よりパフォーマンス良く,よりコストを抑えられるチューニングのポイントはあります。AWSソリューションアーキテクト直伝の本特集でより深い使いこなし方を知ってください。

目次

特集1
作って学ぶプログラミング言語のしくみ
インタプリタ,構文解析器,文法

  • 第1章:プログラミング言語を知ろう
    言語ごとの特徴,パラダイム,内部構造……水島 宏太
  • 第2章:インタプリタ
    抽象構文木をたどって実行する……水島 宏太
  • 第3章:構文解析器
    文字列を読み込んで抽象構文木を作る……水島 宏太
  • 第4章:言語を拡張する
    拡張for文とラベル引数を追加する……水島 宏太

特集2
GraphQL完全ガイド
RESTの先へ! フロントエンドに最適化されたAPI

  • 第1章:GraphQLの基本仕様
    Web APIのためのクエリ言語……加藤 尋樹
  • 第2章:GraphQLクライアントの実装
    RelayでWebフロントエンド,Apollo ClientでiOS/Androidアプリ……加藤 尋樹
  • 第3章:GraphQLサーバの実装
    Apollo ServerでAPI開発,マイクロサービスアーキテクチャでの利用……加藤 尋樹
  • 第4章:GraphQLのスキーマ設計
    Relayから学ぶ実践的なパターン……加藤 尋樹
  • 第5章:GraphQLの運用
    特有の課題と解決策……加藤 尋樹

特集3
速習DynamoDB
AWSフルマネージドNoSQLの探求

  • 第1章:DynamoDBを選択する理由
    高パフォーマンス,高スケーラビリティ,低運用負荷……桑野 章弘
  • 第2章:アプリケーションからDynamoDBを使う
    チャットシステムでAPI操作を実践……成田 俊
  • 第3章:費用と実用性の最適なバランスを導く運用ノウハウ
    Provisioned mode+Auto ScalingとOn-demand modeの使い分け……成田 俊
  • 第4章:新機能のキャッチアップ
    PartiQL,監査機能,トランザクション……成田 俊
  • 第5章:DynamoDBベストプラクティス
    現場でよくある設計と実装の悩みを解決……成田 俊

一般記事

  • 新登場! Scala 3クイックツアー
    表現力豊かな新機能,使いやすさと学びやすさの改善……原田 伸一

連載

  • Goに入りては…… ── When In Go...
    【第27回】Data Sinkを使ったAPI設計 ……コールバックより汎用的なしくみを作ろう! ……牧 大輔
  • Ruby 3標準添付ライブラリ紹介
    【第3回】ファイルを自在に操作する ……fileutils/pathname/un……西山 和広
  • 見なおそう! モダンJavaの流儀
    【第9回】文字をあつかう ……Unicodeのビット幅変化に対応する……櫻庭 祐一
  • 現場のPython ── システム開発も! 機械学習も!
    【第9回】型ヒントとmypyによるコード品質の向上 ……型チェックの基本から,既存コードの改善プロセスまで……吉田 花春
  • PHPで複雑さに立ち向かう
    【第3回】不具合調査や高速化の便利ツール ……Monologによるログ出力,tideways_xhprof,phpspyによる性能解析……五十嵐 進士
  • フロントエンド羅針盤 ── Web体験向上へのアプローチ
    【第3回】継続的なアクセシビリティ改善の探求 ……誰もがいつでも使えるWebを目指して……土岐 真里奈
  • Perl Hackers Hub
    【第70回】Raisin入門 ……Rest APIマイクロフレームワークを使ってみよう!……礒部 浩行 監修:牧 大輔,福本 貴之,松木 雅幸,大沢 和宏

コラム

  • 縁の下のUIデザイン ── 少しの工夫で大きな改善!
    【第27回】数値の入力・選択に適したUI……池田 拓司
  • ちょっと気になる隣の技術畑
    【第2回】Reactの何がエンジニアを夢中にさせるのか ……うひょさん……日高 正博
  • 漫画から学ぶマネジメント
    【第4回】『いいひと。』から学ぶマネージャーのスタンスと強みの総和を生み出すヒント……是澤 太志
  • はまちちゃんとわかばちゃんのREADER'S FORUM ── 読者のページ
    【第76回】……はまちや2,竹原

サポート

ダウンロード

(2021年10月15日更新)

■ご注意
  • 本コーナーは,本誌記事参考用資料としてのご提供を目的としております。
  • 本誌記載の内容およびサポートサイトで公開しているサンプルコードに基づく運用の結果について,記事の筆者,プログラムの作者/提供元,(株)技術評論社は一切の責任を負いかねます。ご自身の責任のもと,ご使用ください。
  • 各サンプルファイル/ソースコードには,個別に,ライセンスやREADMEファイルなどで注意事項/制限事項が添付されている場合がございます。その場合,該当のライセンス,注意事項/制限事項を優先して適用とさせていただきますので,ダウンロード後,内容をご確認ください。

特集1「作って学ぶプログラミング言語のしくみ」

特集2「GraphQL完全ガイド」

特集3「速習DynamoDB」

一般記事「新登場! Scala 3クイックツアー」

連載

  • 「Goに入りては…… ── When In Go...」
    本記事で使用されたソースコード
  • 「現場のPython ── システム開発も! 機械学習も!」
    本記事で使用されたソースコード
  • 「PHPで複雑さに立ち向かう」
    本記事で使用されたソースコード(執筆者GitHubリポジトリ)
  • 「Perl Hackers Hub」
    本記事で使用されたソースコード

正誤表

本誌の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2021年11月15日最終更新)

特集1「作って学ぶプログラミング言語のしくみ」
第1章「プログラミング言語を知ろう」
P.17 「構文解析器──文字列を読み込んで、抽象構文木を作るソフトウェア」の2段落目のコード

(数式の木構造を表現したJavaプログラム)
sealed interface Tree
  permits Addition, Subtraction,
          Multiplication, Divition, Literal {}
// 足し算
class Add(Tree lhs, Tree rhs) implements Tree {}
// 引き算
class Subtract(Tree lhs, Tree rhs) implements Tree {}
// 掛け算
class Multiply(Tree lhs, Tree rhs) implements Tree {}
// 割り算
class Divide(Tree lhs, rhs) implements Tree {}
// 整数リテラル
class Literal(int value) implements Tree {}
(数式の木構造を表現したJavaプログラム)
sealed interface Tree
  permits Addition, Subtraction,
          Multiplication, Divition, Literal {}
// 足し算
record class Addition(Tree lhs, Tree rhs) implements Tree {}
// 引き算
record class Subtraction(Tree lhs, Tree rhs) implements Tree {}
// 掛け算
record class Multiplication(Tree lhs, Tree rhs) implements Tree {}
// 割り算
record class Divition(Tree lhs, rhs) implements Tree {}
// 整数リテラル
record class Literal(int value) implements Tree {}

第2章「インタプリタ」
P.27 「グローバル変数の定義」の1段落目のコード

(グローバル変数定義の抽象構文木クラス)
public final static record FunctionDefinition(
    String name, List args, Expression body
) implements TopLevel {}
public final static record FunctionCall(
    String name, List args
) implements Expression {}
(グローバル変数定義の抽象構文木クラス)
public final static record GlobalVariableDefinition(String name,
Expression expression) implements TopLevel {}

(以下2021年10月27日更新)

連載「現場のPython」P.132 右段 utils_before.pyの4行目

"""バイト文字列で渡されたfileをpathに保存する"""
"""バイト文字列で渡されたdataをpathに保存する"""

連載「現場のPython」P.132 右段 utils_after.pyの5行目

"""バイト文字列で渡されたfileをpathに保存する"""
"""バイト文字列で渡されたdataをpathに保存する"""

連載「現場のPython」P.134 図1

P.134 図1

fileをpathに修正しました。

連載「現場のPython」P.139 右段 欄外脚注

注13 https://github.co.jp/features/actions/
注13 https://github.co.jp/features/actions

※行末の/が不要です。

(以下2021年10月15日更新)

連載「現場のPython」P.133 左段 中ほど「◎静的型チェッカー mypyの導入」の3行目

本記事で利用したバージョンはPythonは3.10.0rc2、
本記事で利用したバージョンはPythonは3.10.0、

「rc2」が不要でした
記事執筆後,正式版がリリースされ,正式版でも動作を確認しました。

連載「現場のPython」P.138 左段 1行目

◎from __future__ import_annotationsを使用する
◎from __future__ import annotationsを使用する

「_」ではなく半角スペースが正しいです。

連載「現場のPython」P.138 左段 中ほどの出力例 3行目〜5行目


  File "non_lazy_annotations.py", line 2, in <module>
    class Hoge:
  File "non_lazy_annotations.py", line 3, in Hoge

  File "non_lazy_annotations.py", line 3, in <module>
    class Hoge:
  File "non_lazy_annotations.py", line 4, in Hoge

連載「現場のPython」P.138 右段 下の出力例 5行目


  File "foo.py", line 5, in <module>

  File "foo.py", line 4, in <module>

商品一覧