資本主義の「切断」に対抗する、東洋的「受容」の論理 ──デジタル敗戦の地で、ぼくたちが「まともな人間関係」を取り戻すための試論

序:技術の脆弱性という「表層」

 その日、ぼくたちの対話は「日本のサイバーセキュリティはなぜこれほど脆弱なのか」という、ごくありふれたニュースへの問題提起から始まった。
 連日のように報道される日本企業へのサイバー攻撃と、それに伴う膨大な個人情報の流出。生成AIという自律的な武器を手に入れた海外の犯罪グループにとって、かつて「日本語」という複雑な言語障壁に守られていた日本市場は、いまや格好の標的(フロンティア)へと変貌を遂げている。世界的なIT企業もウェブサービスもなく、民間AIへの投資額も欧米に比べ桁違いに少ない。かつて世界を席巻した半導体産業が「意思決定の遅さ」と「過剰な自前主義」によって他国にシェアを奪われたように、日本はまたしてもデジタル領域において同じ過ちを繰り返しているのではないか――。そんな素朴な、しかし切実な危機感が出発点だった。

一:経済合理性の限界と「割り切れなさ」

 経済学やグローバル資本主義の数式の上では、日本のこうした現状は「生産性が低い、ダメな社会」と一蹴される。ある学者が冷徹に指摘したように、高品位なサービスを安価に提供し続けること(=日本のコンビニや鉄道、飲食店の過剰なまでの生真面目さ)は、端的に「生産性が低い」ことそのものなのだという。コスト(手間や人件費)をかけず、いかに不完全なサービスを高く売りつけて顧客を囲い込むか。それこそが資本主義における「生産性が高い」社会の正解なのだと。
 けれど、ぼくたちの心にはどうしても、割り切れない「さみしさ」が残る。すべてをお金で清算し、画面の向こうの人間を冷たい自動応答システムに置き換えていく世界が、本当に人間の目指すべき豊かさなのだろうか。この30年間、経済指標の上では貧しくなりながらも、日本社会がそこそこ壊れずに、のんびりとした治安と平穏を維持してきたという事実は、数値化できないもう一つの価値の存在を示唆している。

二:資本主義の本質としての「切断」

 対話が深まるにつれ、ぼくたちは一つの決定的な本質へと辿り着いた。「資本主義への対抗を考えると、人間関係がキーになる」という確信である。
 近代資本主義システムの本質とは、あらゆる人間関係を「契約と等価交換」に置き換え、人と人をバラバラにしていく「切断のシステム」に他ならない。他者を知らなくても、お金さえ払えば生きていける気楽さ。それは一見「自由」に見えるが、裏を返せば「自分もいつでもシステムから切り離される」という強烈な孤独を生み出す。
 この国でもいま、「自分らしさ」や「他人とは違う個性」を持つことが自明の美徳として推奨されている。しかしそれは、他人に依存せず、孤立した個人として自らの市場価値を証明し続けろという、終わりのない生存競争への強制でもある。
 多くの若い世代が心の深いところで苦しんでいる理由も、ここにあるのではないか。彼らの身体の深層には、まだ「他者とつながり、グラデーションのようにお互いが溶け合っている状態こそが心地よい」という東洋的な感性(OS)がしぶとく残っている。それなのに、社会からは無理やり「他人から切断された強い自我」という西洋のOSをインストールさせられている。この二つのOSの致命的な摩擦が、若者たちのメンタルに「生きづらさ」というバグを引き起こしているのだ。

三:「贈与」と「自我の解体」という対抗軸

 すべてを計算可能な損得で切り分ける「切断の社会」の中で、ぼくたちが「まともな人間関係」を取り戻すにはどうすればいいのか。そこで浮かび上がってきたのが、人類学的な意味での「贈与」という概念だった。
 マルセル・モースらが論じた贈与とは、単に物品を無償で提供することではない。それは「お返しが完了するまでの、宙ぶらりんな時間」を通じて、簡単には切断できない温かい関係性や、心地よい「負い目(お互い様)」を社会の中に発生させる行為だ。日本の高品位なサービスも、経済の数式では減点されても、社会への「労働の贈与」であった。ただし、それが働く人の自己犠牲(搾取)という一方通行になっていたからこそ、システムが持続不可能なまでに摩耗していたのである。
 真に「まともな人間関係」を取り戻すためには、他人を「丸ごとaccept(受容)」しなければならない。それは、言葉によって強固に構築された独我論的な「自我」を、自ら壊していくプロセスでもある。「あの人は得か損か」「利用価値があるかないか」という言葉の物差し(自我)を一度捨て、相手のままならなさを丸ごと受け入れる。その痛みを伴う非効率的な瞬間にしか、本当の結びつきは生まれない。

結:意図せざる実験場としての日本

 日本は、経済成長を諦めた貧しい社会の中で、それでも人々がそこそこ幸せに生きていけるかという、「意図しない実験場」になっているのかもしれない。この変わった社会には、資本主義の暴走に対する強力なオルタナティブ(対抗馬)としての独自の価値がある。
 西洋のシステムを深く知ることは重要だ。サイバーセキュリティやITといった「防衛・ビジネスの仕組み」は、グローバルなルールに合わせて器用にアップデートしなければ国が持ち堪えられない。しかし、そのために内側の「お互い様の精神(贈与)」まで西洋化して捨て去る必要は、絶対にない。
 外のルール(西洋)を賢く学び利用しながらも、内側のまともな人間関係(東洋)は死守する。すべてを数値化し、人間をバラバラに切断していく巨大な資本主義の網の目に対して、日々の暮らしの中で、目の前の他者に一言「ありがとう」と声をかけ、等価交換の瞬間に「敬意という贈与」を滑り込ませる。

 技術の遅れという表層的な議論から始まったこの思索は、ぼくたちの内面にある「東洋性の灯火」をどう守るかという、静かで最も強力な抵抗の論理へと着地した。その実験の成否は、いまもぼくたちの手の中にある。




(以上はAI君との対話をAI君がまとめたもの。)
●https://share.google/aimode/YVUvPMgkEXZzYFYky

LAN内に(Rubyで)MP4動画ストリーミング・サーバーを置く

使い方

$ ruby my_video_server.rb [Directory]

で開始ディレクトリを指定する。そのディレクトリより上へはいけない。全ディレクトリをブラウズしたかったら、

$ ruby my_video_server.rb /

とする。これでストリーミング・サーバーが立ち上がる。
 
あとは、iPadなどのウェブブラウザでhttp://[PCのIPアドレス]:8080/にアクセスするだけ。なお、Linux で自分の IPアドレスを知りたければ、

$ ip a

を実行し、inet 192.168.x.x/... のような記載がある行の「192.168.x.x」部分が自分のIPv4アドレス。
 

コード

AI君が一瞬でコーディングしたもの。AI君、すごすぎやろ。
my_video_server.rb

require "bundler/setup"
require 'sinatra/base'
require 'puma'
require 'find'
require 'erb'

# 💡 最初に見せる「ルートディレクトリ」を決める
# 引数があればそれ、なければ今いる場所(カレントディレクトリ)
ROOT_PATH = ARGV[0] ? File.expand_path(ARGV[0]) : Dir.pwd

unless File.directory?(ROOT_PATH)
  puts "❌ エラー: 指定されたディレクトリは存在しません: #{ROOT_PATH}"
  exit 1
end

class MyVideoServer < Sinatra::Base
  configure do
    set :server, :puma
    set :bind, '0.0.0.0' # LAN内のiPadからのアクセスを許可
    set :port, 8080
    set :logging, false
  end

  # 🏠 1. トップページにアクセスしたら、ルートディレクトリの中身を表示
  get '/' do
    redirect '/browse/'
  end

  # 🔍 2. 指定された相対パス(フォルダ内)の中身をブラウズする
  get '/browse/*' do
    # URLから「どのフォルダを見たいか」の相対パスを取得してUTF-8化
    rel_path = params[:splat].first.to_s.force_encoding('UTF-8')
    
    # 💡 パスの安全な結合(文字列置換)。ROOT_PATHより上には絶対戻れないようにガード
    current_dir = File.expand_path("#{ROOT_PATH}/#{rel_path}")
    unless current_dir.start_with?(ROOT_PATH)
      status 403
      return "アクセス拒否: ルートディレクトリの外には出られません"
    end

    # フォルダの中身を仕分けるための箱
    sub_directories = []
    video_files = []

    # 💡 そのフォルダの直下だけを安全にスキャン
    begin
      Dir.children(current_dir).each do |child|
        next if child.start_with?('.')
        full_child_path = "#{current_dir}/#{child}"
        next if File.symlink?(full_child_path) # シンボリックリンクはスルー

        # 文字コードをクリーンに
        clean_name = child.to_s.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')

        if File.directory?(full_child_path)
          sub_directories << clean_name
        elsif File.file?(full_child_path) && clean_name.end_with?('.mp4')
          video_files << clean_name
        end
      end
    rescue => e
      status 500
      return "エラー: フォルダを開けませんでした (#{e.message})"
    end

    # 画面の組み立て
    html = <<~HTML
      <html>
        <head>
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>我が家のファイルブラウザ</title>
          <style>
            body { font-family: sans-serif; padding: 20px; background: #f0f2f5; color: #333; }
            h1 { color: #222; font-size: 22px; margin-bottom: 5px; }
            .path { color: #666; font-size: 14px; margin-bottom: 25px; word-break: break-all; font-family: monospace; }
            ul { list-style: none; padding: 0; }
            li { margin-bottom: 12px; background: white; padding: 15px 20px; border-radius: 12px; box-shadow: 0 2px 4px rgba(0,0,0,0.04); display: flex; align-items: center; }
            .icon { font-size: 22px; margin-right: 15px; }
            a { text-decoration: none; font-size: 16px; font-weight: bold; display: block; word-break: break-all; flex: 1; }
            .dir-link { color: #ff9500; } /* フォルダはオレンジ */
            .video-link { color: #007aff; } /* 動画はブルー */
            .back-btn { display: inline-block; margin-bottom: 20px; background: #8e8e93; color: white; padding: 8px 15px; border-radius: 20px; text-decoration: none; font-size: 14px; font-weight: bold; }
          </style>
        </head>
        <body>
          <h1>📁 ファイルブラウザ</h1>
          <div class="path">現在地: /#{rel_path}</div>
    HTML

    # 上の階層へ戻るボタン(ルートディレクトリにいない場合だけ表示)
    unless rel_path.empty?
      parent_rel_path = rel_path.split('/')[0...-1].join('/')
      html += "<a class='back-btn' href='/browse/#{ERB::Util.url_encode(parent_rel_path)}'>⬅ 上の階層へ戻る</a>"
    end

    html += "<ul>"

    # フォルダ一覧を先にレンダリング
    sub_directories.sort.each do |dir|
      next_rel_path = rel_path.empty? ? dir : "#{rel_path}/#{dir}"
      encoded_path = ERB::Util.url_encode(next_rel_path)
      html += "<li><span class='icon'>📁</span><a class='dir-link' href='/browse/#{encoded_path}'>#{dir}/</a></li>"
    end

    # 動画一覧を次にレンダリング
    video_files.sort.each do |video|
      video_rel_path = rel_path.empty? ? video : "#{rel_path}/#{video}"
      encoded_path = ERB::Util.url_encode(video_rel_path)
      html += "<li><span class='icon'>🎬</span><a class='video-link' href='/watch/#{encoded_path}'>#{video}</a></li>"
    end

    if sub_directories.empty? && video_files.empty?
      html += "<li><span style='color: #999;'>このフォルダ内は空っぽ、または動画がありません</span></li>"
    end

    html += "</ul></body></html>"
    html
  end

  # 🍿 3. タップされた動画をストリーミング配信する
  get '/watch/*' do
    video_rel_path = params[:splat].first.to_s.force_encoding('UTF-8')
    full_video_path = File.expand_path("#{ROOT_PATH}/#{video_rel_path}")

    if File.exist?(full_video_path) && full_video_path.start_with?(ROOT_PATH)
      send_file full_video_path, type: 'video/mp4', disposition: 'inline'
    else
      status 404
      "動画ファイルが見つかりません"
    end
  end
end

puts "🚀 我が家の極上エクスプローラーサーバーを起動します..."
puts "🏠 基点(ルート): #{ROOT_PATH}"
puts "📱 iPadのブラウザでアクセス:"
puts "   http://[あなたのPCのIPアドレス]:8080/"
puts "--------------------------------------------------"

MyVideoServer.run!

#ver 1.0.0 (2026.10.24)

RubyによるLAN内での転送コマンド

AI君がコーディングした。
lan_share.rb

# lan_share_v4.rb
require "bundler/setup"
require 'sinatra/base'
require 'puma'
require 'faraday'
require 'faraday/multipart'
require 'fileutils'
require 'socket'
require 'find' # 💡 日本語のパスを確実にスキャンするために追加

# --- 共通設定 ---
PORT = 4567           # HTTPサーバーのポート
DISCOVERY_PORT = 4568 # 自動発見用(UDP)のポート
DISCOVERY_MSG = "RUBY_LAN_SHARE_SERVER_HERE"
SAVE_DIR = File.expand_path("~/Downloads/lan_share")

# ==========================================
# 1. サーバー側(ファイル受信 + 進捗・現状報告機能)
# ==========================================
class LANReceiver < Sinatra::Base
  configure do
    set :server, :puma
    set :bind, '0.0.0.0'
    set :port, PORT
    set :logging, false
  end

  def self.start_beacon_thread
    Thread.new do
      udp_socket = UDPSocket.new
      udp_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
      loop do
        udp_socket.send(DISCOVERY_MSG, 0, '255.255.255.255', DISCOVERY_PORT)
        sleep 1
      rescue => e
        sleep 2
      end
    end
  end

  post '/upload' do
    type = request.env['HTTP_X_TYPE']

    # 1. 空のディレクトリ作成命令の場合
    if type == 'dir_mkdir'
      relative_path = request.env['HTTP_X_RELATIVE_PATH'].to_s.force_encoding('UTF-8')
      extract_path = File.join(SAVE_DIR, relative_path)
      FileUtils.mkdir_p(extract_path)
      puts "📁 フォルダを作成しました: #{relative_path}"
      return "OK"
    end

    # 2. 通常のファイル受信の場合
    unless params[:file]
      status 400
      return "エラー: ファイルがありません"
    end

    tempfile = params[:file][:tempfile]
    relative_path = request.env['HTTP_X_RELATIVE_PATH'].to_s.force_encoding('UTF-8')
    extract_path = File.join(SAVE_DIR, relative_path)
    
    FileUtils.mkdir_p(File.dirname(extract_path))

    File.open(extract_path, 'wb') do |f|
      f.write(tempfile.read)
    end

    size_mb = (tempfile.size / 1024.0 / 1024.0).round(2)
    puts "💾 ファイル受信完了: #{relative_path} (#{size_mb} MB)"
    
    "OK"
  end
end

# ==========================================
# 2. クライアント側(自動発見 + ディレクトリ完全解剖送信)
# ==========================================

# 💡 削れてしまっていた自動発見メソッドをここに完全復活させました
def discover_target_ip
  puts "🔍 LAN内の転送相手を自動検索中..."
  udp_socket = UDPSocket.new
  udp_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
  udp_socket.bind('0.0.0.0', DISCOVERY_PORT)
  
  return nil unless IO.select([udp_socket], nil, nil, 5)
  
  loop do
    msg, sender = udp_socket.recvfrom_nonblock(1024)
    if msg == DISCOVERY_MSG
      target_ip = sender[3]
      next if Socket.ip_address_list.any? { |ip| ip.ip_address == target_ip }
      puts "✨ 相手を発見しました! IPアドレス: #{target_ip}"
      return target_ip
    end
  end
rescue Errno::EAGAIN, Errno::EWOULDBLOCK
  puts "❌ 相手が見つかりませんでした。"
  nil
ensure
  udp_socket.close if udp_socket
end

# ファイル送信ヘルパー
def upload_file(conn, local_file_path, relative_path)
  payload = { file: Faraday::Multipart::FilePart.new(local_file_path, 'application/octet-stream') }
  response = conn.post('/upload', payload) do |req|
    req.headers['X-Relative-Path'] = relative_path.to_s.force_encoding('UTF-8')
    req.headers['X-Type'] = 'file'
  end
  response.status == 200 && response.body == "OK"
end

# 空のフォルダ作成命令を相手に送るヘルパー
def make_remote_dir(conn, relative_path)
  response = conn.post('/upload') do |req|
    req.headers['X-Relative-Path'] = relative_path.to_s.force_encoding('UTF-8')
    req.headers['X-Type'] = 'dir_mkdir'
  end
  response.status == 200 && response.body == "OK"
end

def send_to_target(path)
  unless File.exist?(path)
    puts "❌ エラー: 指定されたパスが存在しません: #{path}"
    return
  end

  target_ip = discover_target_ip
  return if target_ip.nil?

  conn = Faraday.new(url: "http://#{target_ip}:#{PORT}") do |f|
    f.request :multipart
    f.request :url_encoded
    f.adapter :net_http
  end

  if File.directory?(path)
    puts "📂 ディレクトリ構造を解析中..."
    base_dir = File.basename(path)
    
    directories = []
    files = []

    # 💡 Find.find を使うことで、日本語フォルダの中身も100%確実に捕捉します
    Find.find(path) do |p|
      next if p == path
      next if File.symlink?(p)

      if File.directory?(p)
        directories << p
      elsif File.file?(p)
        files << p
      end
    end

    puts "🚀 遠隔地にフォルダ構造を同期中... (#{directories.size}個のフォルダ)"
    directories.each do |dir|
      rel_path = File.join(base_dir, dir.sub("#{path}/", ""))
      make_remote_dir(conn, rel_path)
    end

    puts "🚀 ファイル群のダイレクト転送を開始します... (#{files.size}個のファイル)"
    success_count = 0
    files.each_with_index do |file, idx|
      rel_path = File.join(base_dir, file.sub("#{path}/", ""))
      print "\r転送中: [#{idx + 1}/#{files.size}] #{File.basename(file)}...          "
      
      if upload_file(conn, file, rel_path)
        success_count += 1
      else
        puts "\n⚠️ 転送失敗: #{rel_path}"
      end
    end
    
    puts "\n✨ ディレクトリ全体の転送が完了しました!"
    puts "   成果: 成功 #{success_count} / 全体 #{files.size}"
  else
    puts "🚀 単一ファイルを転送中: #{File.basename(path)}"
    if upload_file(conn, path, File.basename(path))
      puts "✨ 転送が正常に完了しました!"
    else
      puts "❌ 転送に失敗しました"
    end
  end
rescue => e
  puts "\n❌ 通信エラーが発生しました: #{e.message}"
end

# ==========================================
# 3. 起動スイッチ
# ==========================================
if ARGV.empty?
  puts "🚀 LAN内 ファイル受信サーバーを起動します... (Port: #{PORT})"
  puts "保存先ディレクトリ: #{SAVE_DIR}"
  puts "--------------------------------------------------"
  LANReceiver.start_beacon_thread
  LANReceiver.run!
else
  path = ARGV[0]
  if path
    send_to_target(File.expand_path(path))
  else
    puts "【使い方】"
    puts " サーバー起動: ruby lan_share.rb"
    puts " ファイル送信: ruby lan_share.rb [ファイルやフォルダのパス]"
  end
end

#version 1.0.0 (2026.10.24)

 

使い方

コマンド化した。まず~/Documents/Ruby400/において(いまのところ、どこの場所でも可能、というわけではない)

$ lan_share

でサーバーを立ち上げる。
転送元は

$ lan_share ./sample.txt

これでサーバー側の~/Downloads/lan_share/内にファイルまたはディレクトリが転送される。複雑な構造のディレクトリも丸ごと転送可能。
 
ちなみに

Address already in use - bind(2) for "0.0.0.0" port 4567 (Errno::EADDRINUSE)

のエラーが出た場合は、~/.bashrcに

alias killport='_killport(){ kill -9 $(lsof -t -i :$1); }; _killport'

を追加して、

$ killport 4567

とかする。

AI君との対話まとめ『【思想ノート】「切断」の時代を越えて:日本型共生と「空気」の可能性』

【思想ノート】「切断」の時代を越えて:日本型共生と「空気」の可能性

少子高齢化が進む日本において、労働力の確保と「移民」への拒絶という矛盾は、単なる経済政策のねじれにとどまらない。それは、現代の日本人が抱える深層心理——他者との関わりを拒む「切断」の心理と、そこからの脱却をめぐる、極めて本質的な問いを私たちに突きつけている。

1. 政策のねじれと「防衛的切断」

現在の日本政府は、実質的な労働力として外国人の受け入れを急拡大(特定技能の拡充など)する一方で、永住権の厳格化など「排除」ともとれるブレーキを同時に踏んでいる。この矛盾は、国政がネット上の排外主義的な世論や保守層の「岩盤支持層」へ配慮している結果であり、地方自治体が直面している「街の存続」という切実な悲鳴とは大きく乖離している。

ネットのコメント欄には見るに堪えない排外的な言葉があふれているが、それは社会全体の数パーセントの過激な声がアルゴリズムによって可視化されたものに過ぎない。しかし、現実の若い世代もまた、かつての「ムラ社会」的な町内会や地域の義務を嫌う一方で、外国人に対して根強い「ヨソモノ意識」を抱えている。

この若者たちの心理は、決して他者への単純な攻撃性ではない。それは、「失われた30年」の閉塞感の中で、自分の限られた時間や、日本の社会が持つ「静かで清潔で干渉されない快適さ」をこれ以上乱されたくないという、余裕のなさからくる「守りの排他性(防衛的切断)」なのである。

2. 西洋型「自我」への違和感と、アジアの「別の道」

こうした閉塞感を打破するための処方箋として、よく欧米型の「個人主義」や「徹底した対話力」が挙げられる。しかし、欧米における「無矛盾で、統合された強い自我」同士の対話とは、本質的には言葉を用いた「闘争」であり、論理によって相手を屈服させるゲームに近い。二項対立(正義か悪か、敵か味方か)をベースにしたそのコミュニケーションは、私たちアジアの風土には不自然で、暴力的にすら感じられる。

日本人は、欧米の真似ではない「別の道」を選んでいいはずだ。それは、白黒つけずに曖昧さを残し、グラデーションの中で折り合いをつける「関係性の共生」である。

しかし、それを現代の多文化社会でやり遂げるのは「めっちゃ困難」であると考えられてきた。なぜなら、日本独自の「空気を読む」という高度な察し合いは、育ってきた環境や文化が全く同じであるという「奇跡的な同質性(内輪)」のなかでのみ機能するシステムだと思われていたからだ。空気が読めない外国人が入ってきたとき、私たちは「言葉で闘う」武器を持たないがゆえに、ただ恐怖し、シャッターを下ろすしかなかった。

3. 「空気」は国境を越えるか

だが、本当に「空気」は身内だけのものなのだろうか。ここにひとつのコペルニクス的転回がある。

極めて日本的な情緒や、セリフではなく「行間」で感情を描くアニメや漫画を、海外の人々が日本人とまったく同じように楽しみ、涙しているという現実がある。また、日本に暮らす外国人が自ら「郷に入っては郷に従え」と口にするとき、彼らが従おうとしている「郷」の本質とは、明文化されたルール以上に、その場に流れている無言の秩序や優しさ、すなわち「空気」のことではないか。

欧米人であれ誰であれ、人間には「言葉にできない気配を察する力」や「行間を読む繊細さ」が本能的に備わっている。空気は、日本人だけの排他的な特権ではない。それは国境を越えて伝わり、分かり合える普遍的な感受性なのだ。

結び:まず、コワイという壁を拓くこと

もし「空気」がオープンなものであるならば、日本が目指すべき共生社会の形が見えてくる。それは、欧米のように契約とロジックでガチガチに縛り付けるのでもなく、昔のムラ社会のように生まれ育ちで排除するのでもない。「この思いやりと静かな秩序(空気)を、一緒に大切にしよう」という作法で、ゆるやかに繋がっていく道である。

「空気は言葉にも表れる」という指摘の通り、私たちが相手を恐れて発する冷たい言葉も、受け入れようとして発する優しい言葉も、その裏にある心の開き具合(空気)はすべて相手に伝わっている。

今、最大の障害となっているのは、制度の不備でも文化の違いでもない。日本人の側が「何かされるのではないか」「自分の平穏が壊されるのではないか」と身構えて、心を閉ざしてしまっている「コワイ」という恐怖心そのものだ。

欧米型の「論破し合う闘争」ではなく、「私はあなたを怖がっていませんよ」という安心感をベースにした、日本らしい『心を拓くための対話』。このめっちゃ困難な、しかし人間味にあふれた新しいグラデーションを発明することこそが、これからの日本に課された静かな挑戦なのである。

AI君との対話まとめ『独我論の牢獄と「ヌルさ」の倫理:近代西洋OSの暴走を越えて』

【論考】独我論の牢獄と「ヌルさ」の倫理:近代西洋OSの暴走を越えて

序:限定された性悪説と契約主義の根底

欧米における社会構造や人間観の根底には、「他者は放っておけば自らの利己心に従い、私に悪をなすかもしれない」という「限定された性悪説」が潜んでいる。この強い警戒心こそが、言葉によって自他の境界線を厳密に規定する「契約主義」のインフラとなった。

キリスト教の「原罪」の観念、そしてトマス・ホッブズが唱えた「万人の万人に対する闘争」という自然状態の概念は、まさにこの人間観の言語化である。そこでは、人間関係の本質は信頼ではなく「リスク管理」であり、契約を守る限りにおいてのみ自己の「善(正義)」が担保される。

破:独我論という名の美しい牢獄(他者の記号化)

この人間観は、西洋近代の「主体の強さ」や「個人主義(Individualism)」と地続きである。ルネ・デカルトの「我思う、ゆえに我あり」に端を発する西欧哲学は、唯一確実な「自我」を出発点としたがゆえに、常に独我論(Solipsism)の罠と隣り合わせであった。

エトムント・フッサールの現象学もまた、この独我論的傾向に自覚的であり、他者経験(相互主観性)の構築に死闘を繰り広げた。しかし、どれほど精緻に他者を位置づけようとも、その他者は「私の意識の法廷」で承認された、操作・予測可能な「記号(あるいはデータ)」の域を出ない。

強固な自我の一貫性を保とうとする西洋OSにおいて、他者の全存在を無条件に受け入れることは、城門を開け放ち「自己同一性(アイデンティティ)の崩壊」を招く恐怖に等しい。彼らにとって他者とは、決して分かり合えないからこそ、ルールという記号で縛り、適切な距離を保ち続けねばならない存在なのである。

急:国家と教育に侵入する西洋OSの暴走

この「ミクロな自我の防衛システム」は、マクロな国際政治における「リアリズム(現実主義)」へと完全にスライドする。ウェストファリア体制以降の主権国家は、アナーキー(無政府状態)のジャングルで互いを警戒し合い、「安全保障のジレンマ」という軍拡の自動プログラムを駆動させてきた。

現代の日本社会や知識人層、政治家、そして民衆までもが、この西洋OSを「客観的な正解」として丸呑みし、劣化コピーとしての「知性なきリアリズム」へと退化しつつある。そこでは、リアリズムが本来持っていたはずの「自戒」や「他者視点」すら忘却され、ブレーキのない軍拡の坂道を突き進んでいる。

さらにこの歪みは、教育現場における「みんなちがって、みんないい」という耳触りの良い個性主義(個人主義の変種)の罠ともリンクしている。若者たちは「分割不可能な唯一無二の『個性(エゴ)』という記号」を社会に差し出すよう要請され、「何者かになりたい」という過酷な実存的ノイローゼ(アイデンティティ危機)に身を焦がす。

この「何者かになりたいという虚栄心」が「他者は敵であるという性悪説」と結びついたとき、現代のSNS空間やインフルエンサー経済に代表されるように、「他者を悪の記号として叩き、排除することで、自らの存在証明にする」という最も醜悪なシステムが完成する。

結:『ヌルさ』という名の最後の防波堤

この「頭がよくなりすぎた世界」――世界をすべて計算可能な記号に還元し、虚栄心と性悪説のゲームに熱狂する世界――の暴走を止める鍵は、どこにあるのか。

それは皮肉にも、現代社会が「お花畑」や「古いもの」として切り捨てようとしている、日本(東洋)の民衆が無意識のうちに保持している「良い意味でのヌルさ(寛容さ)」の中にしかない。

平野啓一郎氏が提唱する「分人主義(Dividualism)」のように、関係性の中で流動的に立ち上がる複数の自己を生きる東洋的な身体感覚は、「一貫した単一のエゴ」という西洋の呪縛から人間を解放する。一貫性のない、矛盾を抱えた自分を許容できているからこそ、同じように矛盾に満ちた「他者の全存在を無条件で受け入れる(acceptする)」心のゆとりが生まれる。

無条件の受容とは、頭での計算(合理性)をあえて止めることである。国家レベルでの実践は困難だとしても、個人において他者の全存在を accept する営みが完全に失われてしまえば、人間社会の精神はそこですべて終わる。

私たちは、西洋的な性悪説のリアリズムを冷徹な「鎧」として理解しつつも、その内側の魂には、自他を地続きに包み込む性善説的な「ヌルさ」の灯火を死守しなければならない。それこそが、人類が自らプログラミングした「独我論の牢獄からの自動破滅」を食い止める、最後の、そして唯一のアンカーなのである。

IrfanView を Linux Mint で使う

Wine の導入

まず、Linux Mint に Wine を導入します。これは解説しません。以下などがわかりやすいです。
●🍷 LinuxでWindowsアプリを動かす!Wine入門【初級編】
●🍷 Wine入門【中級編】:LinuxでWindowsアプリをもっと快適に!
 

ダウンロードとインストール

●「IrfanView」定番の画像ビューワー - 窓の杜
ここの
・IrfanView(64bit版)
・IrfanView PlugIns(64bit版)
・IrfanView日本語化モジュール
をダウンロードして(32bit版でもいいです)、端末から Wine でインストールします(下はバージョン4.73の場合)。

$ wine iview473_x64_setup.exe
$ wine iview473_plugins_x64_setup.exe
$ wine irfanview_lang_japanese.exe

 

日本語化

「メニュー」→「Wine」→「IrfanView」でソフトを立ち上げ、「Options」→「Change language」で「JAPANESE.DLL」を選択し再起動すれば、表示が日本語になります。

はてなブログから一年間に読んだ本の冊数とタイトルを出力する(個人的なコード)

使い方

ブログエントリのタイトルの「二重かぎ括弧」で囲まれたものを、本のタイトルと判断して集計、出力します。
2025年の出力例。

$ ruby blog_books.rb 2025
1月 13冊
 増補 現代美術逸脱史
 更に、古くて素敵なクラシック・レコードたち
 来たれ、新たな社会主義
 2001年映画の旅
 中村哲 思索と行動(下)2002-2019
 縄文人と弥生人
 Blue
 何ものにも縛られないための政治学
 バトラー入門
 侵略日記
 わたしの神聖なる女友だち
 地方消滅2
 パーティが終わって、中年が始まる
2月 14冊
 眼がスクリーンになるとき
 生命式
 だめ連の資本主義よりたのしく生きる
 手段からの解放
 ピークアウトする中国
 愛国者の憂鬱
 ポスト・サブカル焼け跡派
 音楽と生命
 新版 言葉果つるところ
 「戦後」を読み直す
 水中の哲学者たち
 モナドの領域
 対談集 ららら星のかなた
 功利主義
3月 7冊
 ハンス・ヨナスを読む
 バレエ・メカニック
 一切は空
 0の裏側
 国家について/法律について
 絶望ハンドブック
 縮小ニッポンの衝撃
4月 16冊
 父、松本竣介
 南三陸日記
 〈公正(フェアネス)〉を乗りこなす
 フッサール入門
 本当の翻訳の話をしよう
 ナイン・ストーリーズ
 漂流
 サボる哲学
 「なぜ?」から始める現代アート
 日本が心配
 増補版 はたらかないで、たらふく食べたい
 「若者の読書離れ」というウソ
 おいしいごはんが食べられますように
 こじらせ男子とお茶をする
 チェコ・アヴァンギャルド
 1973年に生まれて ――団塊ジュニア世代の半世紀
5月 7冊
 モールの想像力
 人生の壁
 日本人の9割が知らない遺伝の真実
 あなたに安全な人
 新訳 平和の経済的帰結
 からゆきさん 異国に売られた少女たち
 彼岸の図書館――ぼくたちの「移住」のかたち
6月 11冊
 60年代ポップ少年
 詩の構造についての覚え書
 教養主義のリハビリテーション
 盲目と洞察
 中学生までに読んでおきたい日本文学7 こころの話
 物価を考える
 ヤンキーと地元
 春の庭
 批評の教室
 貧困とは何か
 センスの哲学
7月 6冊
 ポスト人新世の芸術
 ライ麦畑でつかまえて
 宮本常一を旅する
 中学生までに読んでおきたい日本文学1 悪人の物語
 建築の難問――新しい凡庸さのために
 「国境なき医師団」を見に行く
8月 10冊
 ガザ、西岸地区、アンマン――「国境なき医師団」を見に行く
 ヘリオガバルス
 わたしは「セロ弾きのゴーシュ」――中村哲が本当に伝えたかったこと
 敗戦日記
 詭弁と論破
 江藤淳と加藤典洋
 「国境なき医師団」をそれでも見に行く 戦争とバングラデシュ編
 崇高と資本主義 ジャン=フランソワ・リオタール論
 時間とテクノロジー
 「国境なき医師団」になろう!
9月 10冊
 だれか、来る
 不完全な司書
 続 華厳という見方
 平成史
 ここで唐揚げ弁当を食べないでください
 つくるをひらく
 歴史の屑拾い
 近代を彫刻/超克する
 昭和的
 理不尽ゲーム
10月 7冊
 根っからの悪人っているの?
 オタク文化とフェミニズム
 漂泊のアーレント 戦場のヨナス
 僕には鳥の言葉がわかる
 ブロッコリー・レボリューション
 最終講義 ポスト資本主義の欲望
 久生十蘭ラメール戦記
11月 6冊
 末世を生きる
 日本、ヤバい。
 こころをそのまま感じられたら
 失われた「文学」を求めて(文芸時評編)
 地球と書いて〈ほし〉って読むな
 管理職の戦後史
12月 5冊
 定形外郵便
 戦争ミュージアム――記憶の回路をつなぐ
 ハンス・ヨナス 未来への責任
 増補新版 古代から来た未来人 折口信夫
 フレンチ・セオリー

合計 112冊

 

Ruby コード

blog_books.rb

require "nokogiri"
require "open-uri"

def get_month_titles(year, month)
  url = "http://obelisk2.hatenablog.com/archive/#{year}/#{month}"
  titles = []
  loop do
    body = Nokogiri::HTML.parse(URI.open(url))
    titles = body.css("a.entry-title-link").map(&:text).reverse + titles
    pager_node = body.css("div.pager span.pager-next a")&.at(0)
    if pager_node&.text&.strip == "次のページ"
      url = pager_node.attribute("href").value
    else
      return titles
    end
  end
end

year = ARGV.shift.to_i
total = (1..12).sum {|month|
  book_titles = get_month_titles(year, month).map {|title|
    title.scan(/『(.+?)』/)
  }.flatten
  number = book_titles.size
  puts "#{month}月 #{number}冊"
  puts book_titles.map { " " + _1 }
  number
}
puts
puts "合計 #{total}冊"

#ver. 1.0.0

Ubuntu で「Chrome を更新できません」と出る

症状

Ubuntu 24.04 LTS で Chrome を立ち上げると、「Chrome を更新できません」と出る。「Chrome を再インストール」を押すと Chrome のダウンロード・サイトに飛び、そこで再インストールしてみても、うまくいかない。
 

対策

https://support.google.com/chrome/thread/304500171/ubuntu-24-04-1-lts%E3%81%A7chrome-%E3%81%AE%E6%9B%B4%E6%96%B0%E3%81%8C%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%AA%E3%81%84?hl=ja
 
以下を実行。

$ sudo -i
# sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
# wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor | tee /etc/apt/trusted.gpg.d/google.gpg >/dev/nullapt-get update
# apt update
# apt-get install google-chrome-stable

Ubuntu 24.10 で「Release ファイルがなくなっています」というエラーが出た

Ubuntu 24.10 で

$ sudo apt update

をやったら、

http://jp.archive.ubuntu.com/ubuntu oracular-backports Release には Release ファイルがなくなっています

というエラーが出た。これはもう Ubuntu 24.10 Oracular Oriole⁠ のサポート期限が来ているためである。
 

確認

「/ect/apt/sources.list.d/ubuntu.sources」をエディタで開くと、

Types: deb
URIs: http://jp.archive.ubuntu.com/ubuntu/
Suites: oracular oracular-updates oracular-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu
Suites: oracular-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

となっていた。
 

対策

https://discourse.ubuntu.com/t/unable-to-upgrade-from-24-10-to-25-04/64331/8
 
上ファイルを

Types: deb
- URIs: http://archive.ubuntu.com/ubuntu/
+ URIs: http://old-releases.ubuntu.com/ubuntu/
Suites: oracular oracular-updates oracular-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
- URIs: http://security.ubuntu.com/ubuntu/
+ URIs: http://old-releases.ubuntu.com/ubuntu/
Suites: oracular-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

と修正して、

$ sudo apt update
$ sudo apt upgrade

を実行。
 

アップグレード

$ sudo do-release-upgrade

を実行。

Yahoo!メール が Thunderbird で使えなくなった

Linux Mint の Thunderbird で「Yahoo!メール」を開こうとしたところ、ログインできなくなった。
 

「Yahoo!メール」のセキュリティ強化

「Yahoo!メール」が

  • SMS認証
  • パスキー(生体認証)

を導入した。わたしはスマホ等をもっていないので、「ワンタイムパスワード」で回避した。
 

「Yahoo!メール」の設定

しかし、これでも Thunderbird でログインできない。
 
AI に訊いてみたら解決した。

  • 「Yahoo!メール」の「設定」(右上の歯車アイコン)から「IMAP/POP/SMTPアクセス」を選択
  • 「Yahoo! JAPAN公式サービス以外からのアクセス(IMAP/POP/SMTP)」の「許可する」をチェック、さらにその下をすべて「利用する」をチェック

これで Thunderbird でログインできるようになった。
 
※ここに既にあった
●Yahoo!メール新着情報