動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About

動くコード図鑑

$ ls -1 /library | wc -l → 619

触って動く、検証済みの正解集。

公開記事から抽出した全コードブロックを 1 つずつページ化。 ▶ ボタンで 実行ログを再生し、 さも今動いてるかのように出力を流す。

この図鑑の使い方

言語で絞る

C# / SQL / TypeScript / PowerShell / Bash でフィルタ。

▶ で実行

事前収録の出力を 1 行ずつ再生。 ぱっと結果が見える。

記事と接続

各 snippet は出典記事へのリンク付き。 文脈ごと読める。

絞り込み

snippet 一覧

619
JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

JavaScript ファイルを読み込む

CSSやJavaScriptの外部ファイル作成方法とその読み込み方法!未収録#6ba3928fce7b
C#
using System;
using System.Data;
using System.Windows.Forms;

namespace DataSourceBlog

まず通常の方法でDataSourceにDataTableを指定してみる。

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#a43fb2eac8de
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = GetDataTable();
            dataGridView1.Columns["UserId"].HeaderText = "ユーザーID";
            dataGridView1.Columns["UserName"].HeaderText = "ユーザー名";

まず通常の方法でDataSourceにDataTableを指定してみる。

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#d64ba285ae52
C#
namespace DataSourceBlog
{
    public class DataItems
    {
        public int UserId { get; set; }

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#828afb95d512
C#
        private List<DataItems> GetItems(DataTable table)
        {
            var result = new List<DataItems>();

        foreach (DataRow row in table.Rows)

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#7f941235618b
C#
using System.ComponentModel;

namespace DataSourceBlog
{
    public class DataItems

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#b4c868eb641d
SQL
from rest_framework import generics
from .serializers import TodoSeriarizer

class CreateTodoViewSet(generics.CreateAPIView):
    serializer_class = TodoSeriarizer

CreateApiViewの超絶ミニマムな使い方

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#13aa00d89635
SQL
from django.db import models
from django.contrib.auth.models import User

# Todoは保持しているユーザー、タイトル、created,updatedを持っている。
class Todo(models.Model):

DjangoRestFrameWorkのCreateApiViewの使い方

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#08aa96828022
SQL
from rest_framework import serializers
from core.models import Todo


class TodoSeriarizer(serializers.ModelSerializer):

DjangoRestFrameWorkのCreateApiViewの使い方

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#047a48499eda
SQL
from django.shortcuts import render
from core.models import Todo
from rest_framework import viewsets,generics
from .serializers import TodoSeriarizer

DjangoRestFrameWorkのCreateApiViewの使い方

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#bd64c9e090d7
SQL
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import TodoViewSet,CreateTodoViewSet

app_name = 'todo'

DjangoRestFrameworkのgenericsはrouterが使えない

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#b36e79797695
SQL
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import TodoViewSet,CreateTodoViewSet

app_name = 'todo'

DjangoRestFrameworkのgenericsはrouterが使えない

DjangoでCreateApiViewのミニマムな使い方と効かない場合に試してみること未収録#6953355c619f
SQL
from django.db import models

class User(models..Model):
    name = models.CharField(max_kength = 1)

from django.db import models

DjangoでMigrateが通らない時に確認すること未収録#5cc34ac3dddb
SQL
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import pymysql

manage.pyにMysqlを入れる

DjangoでMigrateが通らない時に確認すること未収録#4e04a555ca62
SQL
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()

Modelの定義

DjangoでModelからTemplatesにデータを渡す方法と考え方未収録#45b66af486e9
SQL
from django.shortcuts import render

// ここでモデルのインポートをする。
from .model import student

View.pyの編集

DjangoでModelからTemplatesにデータを渡す方法と考え方未収録#4dd482ebbc53
SQL
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),

DRFで単純なSimpleJWTの導入は簡単だが

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#148229e2b4cf
SQL
from django.db import models

# Todoはタイトル、完了フラグ、created,updatedを持っている。
class Todo(models.Model):
    title = models.CharField(max_length=100)

TodoのModel、シリアライザー、View

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#8e3888c6fa12
SQL
from rest_framework import serializers
from core.models import Todo


class TodoSeriarizer(serializers.ModelSerializer):

TodoのModel、シリアライザー、View

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#d2a11ec1f097
SQL
from core.models import Todo
from rest_framework import viewsets,permissions,generics
from .serializers import TodoSeriarizer


TodoのModel、シリアライザー、View

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#316cb27d1413
SQL
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from rest_framework import serializers
from django.contrib.auth import get_user_model

これで安心かと思いきや

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#e9c2ebb640ee
SQL
from django.shortcuts import render
from django.contrib.auth.models import User
from rest_framework import viewsets, generics, authentication, permissions
from rest_framework.exceptions import NotFound
from .serializers import UserSerializer

これで安心かと思いきや

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#8801215d054f
SQL
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from rest_framework import serializers
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password

パスワードハッシュ化して登録するロジックはシリアライザーに書く

DRFでsimpleJWTを導入!ハッシュ化しないと正常に動かない!?未収録#5e80da212893
PowerShell
# dev DB で Up → Down → Up の往復を確認
Update-Database -TargetMigration:AddEmailToUsers
Update-Database -TargetMigration:Previous
Update-Database -TargetMigration:AddEmailToUsers

規律 ①: Down() を必ず手動で書き直し検証 (⏱ 15 分)

EF6 Code First Migration で本番事故を防ぐ 3 つの規律 — 業務 SE が踏むスキーマ自動生成の落とし穴未収録#3bd702dd9444
SQL
-- これ、 EF6 が rename のつもりで吐く SQL の典型 (★危険)
ALTER TABLE [dbo].[Users] DROP COLUMN [Name];
ALTER TABLE [dbo].[Users] ADD [FullName] [nvarchar](256) NULL;
-- ↑ Name カラムのデータは消える

規律 ②: 自動生成 SQL を Update-Database -Script で吐かせて DBA レビュー (⏱ 10 分)

EF6 Code First Migration で本番事故を防ぐ 3 つの規律 — 業務 SE が踏むスキーマ自動生成の落とし穴未収録#3b347d7e7858
C#
// 開発時はこれで動いた
var customers = db.Customers.ToList();
foreach (var c in customers) {
    // 顧客ごとに c.Orders を見る ← ここで1ループに1 SQL 飛ぶ
    Console.WriteLine($"{c.Name}: 注文 {c.Orders.Count()} 件");
▶ 実行可

なぜ「LINQ 書いたら SQL が爆発する」のか

EF6 + LINQ で N+1 問題を踏まない3つの書き方#044de404ad21
C#
class Customer { public int Id; public string Name = ""; }
class Order { public int Id; public int CustomerId; public int Amount; }

var customers = new List<Customer> {
    new() { Id = 1, Name = "A社" },
▶ 実行可

パターン1: 罠 (Include 忘れ + foreach 内 navigation)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#19cd61cdd189
C#
// EF6 (.NET Fx 4.7.2)・これが本番で爆発するやつ
using var db = new MyDbContext();
var customers = db.Customers.ToList();   // SQL #1: SELECT * FROM Customers
foreach (var c in customers) {
    var count = c.Orders.Count();        // ループのたびに SQL 追加発行
▶ 実行可

パターン1: 罠 (Include 忘れ + foreach 内 navigation)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#0cd0b26748ea
C#
// EF6 (.NET Fx 4.7.2)・Include で関連を1クエリにまとめる
using var db = new MyDbContext();
var customers = db.Customers
    .Include(c => c.Orders)             // JOIN Orders を含める
    .ToList();                           // SQL #1: SELECT ... FROM Customers c LEFT JOIN Orders o ...
▶ 実行可

パターン2: Include で eager loading (1クエリで関連ごと取得)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#8a5aff026173
C#
Console.WriteLine("[SQL #1] SELECT c.*, o.* FROM Customers c LEFT JOIN Orders o ON c.Id = o.CustomerId");
var customersWithOrders = customers
    .GroupJoin(orders,
        c => c.Id,
        o => o.CustomerId,
▶ 実行可

パターン2: Include で eager loading (1クエリで関連ごと取得)

EF6 + LINQ で N+1 問題を踏まない3つの書き方#a218fe1f714f