freeeにおけるモジュラモノリスの事例を大規模プロダクトから新規プロダクトまで紹介します。
概要 本記事は、スクラムを管理するアプリケーションをクリーンアーキテクチャの考え方で実装し、WebからもCLIからも動かせるようにしたという実践を紹介するものです。学習のための個人開発で作成したサンプルアプリケーションの設計と実装を適宜紹介することで、クリーンアーキテクチャに対する理解を深めることが目的です。 モチベーション なぜ現代の開発現場で定着しているクリーンアーキテクチャのアプリを手元で実装してみようと思ったかというと、私自身Webエンジニアとして働く中で、クリーンアーキテクチャの実践例は入出力をWebに限定したものばかりだったからです。 しかし、「詳細に依存せず抽象に依存すること」と唱えるクリーンアーキテクチャにとって、Webはただの詳細です。そこで、入力元、出力先を問わないアプリケーションはどのような書き味になるのか、自分で確かめてみたくなりました。 例えば、「ドメイン層は独立
はじめに CastingONEでバックエンドエンジニアをやっている清水です。 この記事ではクリーンアーキテクチャについて学んだけど具体的にどのように実装すれば良いのかという悩みがあったので実装例をまとめてみた記事になります。 クリーンアーキテクチャで実装されたサンプル実装のうちGitHubのスター数が多いリポジトリをピックアップして、設計内容を紹介していきます。 具体的にどこにどんな実装をするべきなのかも含めて紹介していきます。 処理を一部省略して紹介するため実際の処理内容を確認したい場合はGitHubでご確認お願いします。 クリーンアーキテクチャとは クリーンアーキテクチャは、ソフトウェア設計の原則を適用して、依存性の方向性を逆転させ、ビジネスロジックから詳細(フレームワークやデータベース)を分離するアーキテクチャパターンです。これにより、テストしやすく、メンテナンス性が高く、柔軟性のあ
Next.js App Routerのリリース以降、 async function で書けるServer Componentsいいじゃんファイルベースルーティングも使いやすいなと触ってたのですが、まだ安定していないこともあり不可解なエラーメッセージや複雑なキャッシュの仕組み、デプロイ先を選ぶ感じなどこのままNext.jsにベットしてていいのかなと感じていました。 そんな折にHonoでシンプルなフォームを持つWebアプリを書く機会があり、非常に優れた開発者体験に驚きました。5年以上前にMPAを開発した経験もありますがそこから比べてもとても良くなっていて、Honoの良さを感じるとともにMPAというアプローチを見直すきっかけになりました。 そもそも現在Webフロントエンドを構築する際に当たり前のように選択肢に上がるSPAですが、必ずしもSPAが適していない場合でもSPAが選択されることが少なくな
はじめに 近年、Kubernetesの採用が進む中、複数のチームが関わり、複数のクラウドプロバイダーへのデプロイを行い、異なるスタックを扱う組織では、その導入の複雑さが新たな問題となっています。本書 『Platform Engineering on Kubernetes』は、Kubernetes に登場しつつあるベストプラクティスとオープンソースツールを活用し、これらのクラウドネイティブの問題を技術的に組織的にどのように解決するかを示してくれます。 learning.oreilly.com 本書では、Kubernetes上に優れたプラットフォームを構築するための要素を明確に定義し、組織の要件に合わせて必要なツールを体系的に紹介しており、実際の例とコードを交えながら各ステップをわかりやすく説明することで、最終的にはクラウドネイティブなソフトウェアを効率的に提供するための完全なプラットフォーム
はじめに 近年、様々な分野で機械学習の利用が進む中、モデルの品質を担保し、継続的な学習を行うための施策が重要視されています。そのため、機械学習のためのDevOpsであるMLOpsの必要性が高まっており、AI事業本部でも研修内容に取り入れています。 より良いMLOpsを構築するためには、アプリケーションやインフラの知識も必要です。そのため、今年は昨年までと異なり、MLエンジニアだけでなくソフトウェアエンジニアも講義に参加しました。また、新たに実践編が加わり、より業務を意識した講義が追加されました。 Container編 基礎編 応用編 実践編 そこで、今回は研修で行われた各講義の資料を公開したいと思います。 Container編 Container編では、コンテナにまつわる技術に対しインデックスを張ることと、イメージ作成や運用時のTipsを学び実業務に役立てることを目的としています。 そのた
はじめに 技術評論社様より発刊されているSoftware Designの2024年5月号より「レガシーシステム攻略のプロセス」と題した全8回の連載が始まりました。 本連載では、ZOZOTOWNリプレイスプロジェクトについて紹介します。2017年に始まったリプレイスプロジェクトにおいて、ZOZO がどのような意図で、どのように取り組んできたのか、読者のみなさんに有益な情報をお伝えしていければと思いますので、ご期待ください。第1回目のテーマは、「ZOZOTOWNリプレイスプロジェクトの全体アーキテクチャと組織設計」です。 目次 はじめに 目次 ZOZOTOWNリプレイスの背景、目的 背景 目的 柔軟なシステム 開発生産性 技術のモダン化 採用強化 ZOZOTOWNリプレイスの歴史とアーキテクチャの変遷 アーキテクチャの変遷 2004年〜2017年:オンプレミス(リプレイス前) 2017年〜20
建物の外壁からタイルが落下する事故が散見されている。経年劣化や施工不良など要因は個々の事例ごとに異なるものの、落下したタイルが通行者などに当たれば、取り返しがつかない。過去には外壁タイルの落下による死傷事故も起こっている。 本連載では、「一級建築士矩子の設計思考」(鬼ノ仁/日本文芸社)のキャラクターを使って新規に書き下ろしたイラストとともに、建築の「危ないデザイン」を振り返る。 前述の外壁タイルは、建物に高級感を与えるなど建築の意匠を構成する上で重要な役割を担う。マンションなどを中心に採用事例は今も多い。 一方、大阪地方裁判所判事(当時)の高嶋卓氏が「判例タイムズ」の2017年9月号に寄せた論文によると、大阪地裁で建築関係訴訟を専門で扱う第10民事部における未処理の事件数の5~8%は、外壁タイルの瑕疵に関する事案となっている。そこで今回は、老朽化した建物の増加とともに、これから発生数が増え
はじめに よくQiitaでおすすめアプリとかの記事を見かけますが 逆に使わなくなったアプリの紹介記事ってなくね? と思い今その勢いで本記事を書き進めています。需要があるかはしーらないっ。 本記事では、今年で4年目のエンジニアが作業効率を追い求める中で淘汰されていったアプリたちを紹介します。 ちなみに当方Macユーザです。 エディタ Visual Studio Code 3年目くらいまでは結構使ってました。 settings.jsonやkeybindings.jsonをdotfilesで管理してみたいなこともするくらいには使ってました。 が、何かのタイミングでvimに興味を持ち、vimを使いはじめてから徐々に使わなくなってゆきました。 vimに興味を持った最初の頃はVSCの拡張でvimがあったので、それを使ってました。 VSCでvimの操作を再現できる拡張です。 しかし vimと言えば学習コ
「うちの開発組織っていい感じなんだっけ?」で気づいた判断指標の曖昧さ 開発生産性を計測して、開発組織の“当たり前基準”を上げた話 開発生産性を計測し、開発組織の当たり前基準を上げる 「全体の開発の流れが見える状態」から「全部のプロセスが見えない状態」に変化する中で感じた危機 大沼和也氏:「開発生産性を計測し、開発組織の当たり前基準を上げていく」という内容で発表いたします。今日はどういうふうにやったかも軽くお話ししますが、どういった経緯や背景で、この生産性を追おうと思ったのかというところを主に話していきたいと思っています。 まず背景を説明します。最初は僕が1チームのスクラムマスターをやっていて、そのあとに複数チームを見る立場に変わっていったというところで、その1チームのスクラムマスターをやっていた時は自分も開発していたこともあり、基本的に全体のチームの開発の流れが全部見える状態だったんですね
夏の暑さもだいぶ落ち着いてきていよいよ秋めいてきました、そろそろサンマがおいしい季節ですね、菅野です。 AWSを用いて様々なアーキテクチャを作成することが可能ですが、どういった構成になっているのかを一目で表すには図が効果的です。 手動でPowerPointや、draw.io等の作図ツールを用いて作成することも多いのではないか、と思いますが、ChatGPTで簡単に出力できたら便利ですよね。 Advanced Data Analysysの動作環境ではDiagramsライブラリがインストールされていないため、Pythonコードを直接ChatGPTで動かして構成図を出力してもらうことはできませんでした。 なので、今回はChatGPTにPythonのライブラリDiagramsを用いてクラウドの構成図を作成するPythonコードを作成してもらいましょう。 今回の検証ではGPT-4モデルを利用します。
RISC-Vの世界的な普及を促進するため、Qualcomm、Infineon、BOSHなど5社がリファレンスアーキテクチャなどを提供する企業を共同設立すると発表 米国のQualcomm Technologies、ドイツのInfineon Technologies、ドイツのRobert Bosch、ノルウエーのNordic Semiconductor、オランダのNXP Semiconductorsの5社は、RISC-Vプロセッサの世界的な普及を促進するための企業を共同で設立すると発表しました。 RISC-Vは、RISC-V Internationalの下でオープンかつ無料で使えるプロセッサの命令セットとしてライセンスされています。シンプルな命令セットで電力効率の高いプロセッサを実現可能な点が特徴とされているため、将来的にはArmの競合になるとの見方もあります。 下記はQualcommが発表し
はじめに この記事は、業務でフロントエンドのディレクトリ設計思想を変更した際の作業をまとめた記事です📕 それなりの規模のプロジェクトでの移行作業のため、新規機能実装などに影響が出にくいようにリファクタリングを進めてきました。そこでの進め方や感想も含めてお伝えできればと思います。 前提 6年ほど運用しているReact Nativeのプロジェクトでの移行作業のお話です。 従来のディレクトリ設計思想はAtomic Designを採用していました。しかし、organismsのコンポーネントが300個近くにも及び、プロジェクトの規模が大きくなるにつれて様々な課題が浮き彫りになりました。これを機に設計思想の移行を決めました。 Layer型のAtomic DesignからFeature型のディレクトリ構造に移行していこうと思います😌 参考: ソフトウェアアーキテクチャの基礎 なぜ移行したか なぜ移行
米カリフォルニア州ロサンゼルスで公開された応急仮設住宅(2024年1月31日撮影)。(c)Frederic J. BROWN / AFP 【2月1日 AFP】米カリフォルニア州ロサンゼルスで1月31日、路上生活者の利用を想定して開発された応急仮設住宅が公開された。同州では近年、ホームレス問題が深刻化している。 この仮設住宅は、ギャビン・ニューサム(Gavin Newsom)州知事が推し進めるホームレス問題対策計画の一環として開発された。知事主導で行われたコンペで優勝したパレットシェルター(Pallet Shelter)社が手掛けた。 6.5平米のタイプとトイレやシンクなどが完備された11平米の2タイプがある。州内の主要都市に設置するため、今後、計1200戸が製造される予定だ。(c)AFP
◆ Live配信スケジュール ◆ サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。 ⇒ 詳細スケジュールはこちらから ⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください 【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜 Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。 https://tech-lab.connpass.com/event/311864/ こんにちは、サイオステクノロジー武井です。今回は、「RAG構築のためのAzure OpenAI Serviceリファレンスア
こんにちは。メルカリ ハロのSoftware Engineer (Engineering Head)の@napoliです。連載:Mercari Hallo, world! -メルカリ ハロ 開発の裏側-の2回目を担当させていただきます。 2024年3月上旬にメルカリ ハロという新しいサービスが公開されました。メルカリ ハロは好きな時間に最短1時間から働ける「空き時間おしごとアプリ」です。 この記事ではメルカリ ハロを作るにあたり、どういった技術スタックやアーキテクチャを選定したのか、さらにその背景と意思決定をご紹介したいと思います。 この記事で得られること メルカリ ハロで採用されている技術スタックやアーキテクチャの全体像 その意思決定の理由とプロセス これから新規サービスを立ち上げるうえでのヒント 主な技術スタック メルカリ ハロで利用されている主な技術スタックは以下のとおりです。 バッ
プロンプトによって欲望を視覚化するプロセスには、「考える」時間が差し挟まれる余地はない。インスタ写真に添えられる大量のハッシュタグ、あるいは事細かなカテゴリー分けがされていくポルノとも通底する「表面的語句」の強力な作用は、画像生成AI(人工知能)の設計思想の根幹にも及んでいる。「バーベンハイマー」画像のおぞましさは、プロンプトを入力した者がなにひとつ考えず、感じないままだというところにある。 *** 過日「Barbenheimer(バーベンハイマー)」というインターネットミームが物議を醸した。Barbenheimerとは「バービー」と「オッペンハイマー」から生まれた造語である。米国で大ヒット中の映画『バービー』のキャラクターに原爆のキノコ雲などを合成した画像が大量に作られ、各種SNSにポストされた。なぜバービーにキノコ雲なのか。『バービー』と、原爆を開発した物理学者を描いた映画『オッペンハ
はじめに アプリボット SREチームの一条です。 弊社ではAWSやGCPの構築にTerraformを利用しています。 IaC(Infrastructure as Code)には欠かせないTerraformですが、長らく運用していく中で様々な課題に直面し、その度に構成や運用ルールを更新していきました。 しかし、まだ完璧な構成ではないと思っています。 なぜなら、会社・プロジェクト独自の事情もありますが、他社の事例を参考にしても運用方法は様々で、これといった正解がないと感じているからです。 今回は弊社のAWSにおけるTerraformの構成を公開しますので、事例の一つとして参考にしていただければと思います。 また、事例を世の中に増やすために、この記事を読んでくださった皆様も、構成や運用ルールを公開・共有していただけますと幸いです。 構成紹介 前提 弊社では1プロジェクトに対して、1~N個のAWS
Amazon Web Services ブログ アプリケーション開発者のための PostgreSQL アーキテクチャに関する検討: パート 1 アプリケーション層は多くのクラウドアーキテクチャで世界中がアクセスする部分ですが、使用しているデータベースに合わせてアプリケーションを最適化する方法を検討することはほとんどないようです。リレーショナルデータベースエンジンを使用するときは、スキーマの設計だけでなく、アプリケーションが管理可能で、スケーラブルで、パフォーマンスが高いことを保証するために、データベースがストレージシステムに対してデータを読み書きする方法を理解することが重要です。シリーズのパート 1 となるこの投稿では、PostgreSQL の主要な用語について説明し、次に、Amazon Aurora PostgreSQL 互換エディションまたは Amazon Relational Dat
ここ数年「デザインシステム」はIT業界を中心に流行語になっていますが、どうにも「〜システム」と呼んでしまっていることと、実際にそれが指している概念がはっきりしないが故に、私にとっては積極的に使いたくない語になってしまっています。皆さんが「デザインシステム」の語で言及しているものは、本当に同じ概念を指しているのでしょうか? 定義にあたってみる「デザインシステム」「Design system」の言葉の定義を軽く調べてみました。 とりあえずWikipedia(英語)にはこのように書かれています。 デザインシステムは、任意のアプリケーションを組み立てるのに用いる再利用可能なコンポーネントと標準規約の集まりです。デザインシステムは、モバイルアプリケーションやWebサイトなどデジタルプロダクトのデザインと開発をサポートします。パターン、コンポーネントライブラリ、デザイン言語、スタイルガイド、コード化さ
FireWire、i.Link、DV、Lynxといろいろな呼び名があるのがIEEE 1394。IEEEで標準化がなされているので本稿ではIEEE 1394で通すが、AppleはFireWire、ソニーはi.Link、TIはLynxという名称を使っており、また一般にはDV端子と呼ばれることも多かったが、中身は「原則として」一緒である(多少例外はあり:後述)。 SCSIよりも美しいI/Fを求め Appleが立ち上げたIEEE 1394 IEEE 1394の規格をそもそも立ち上げようとしたのはApple Computerで、1986年のことである。1986年といえばMacintosh Plusが出たばかりの頃で、外部ストレージはSCSIを利用していたが、Apple的にはSCSIが美しくなかったのだろう。具体的には太いケーブル(なにしろ8bitのパラレルバスである)やPlug&Playの欠如、5M
この記事は MICIN Advent Calendar 2023 の24日目の記事です。 前回はSaneさんの「データ基盤チームで社内インターンをやってみて」でした。 はじめに abekohです。MICINでMiROHAの開発をしております。 本記事では、書籍等から得た設計・実装パターンの知識や、実際にプロダクト開発で試して得られた経験などから編み出した、開発効率向上のためのWeb API開発のプラクティスを紹介します。 筆者が関わっているMiROHAは治験の業務支援を取り扱うプロダクトです。MiROHAの開発における特性として、以下のようなものが挙げられます。 治験業務に関するドメインが特有で複雑 前例が少なく、MVPを追求中。プロダクトのアプローチが頻繁に変わる 外部品質は高い水準が求められる これらの特性を意識して開発を促進させるために日々試行錯誤しております。 複雑なドメインに対す
はじめに 「理解容易性」は「保守性」の観点の1つとして重視され、多くの原則や技法が紹介されているが、断片的かつ多様であり、全体像を理解することは難しい。 抽象度は高いが、体系的に観点を整理する事で、その理解の助けとなれば幸いである。 定義 「理解容易性」を簡単に言えば、「理解のしやすさ」であるが、その意味から掘り下げると、「思考する量」と言い換えることができる。 本記事では理解容易性を「思考量の少なさ」と定義し、7つの観点に整理した。 先に要約およびチェックリストを記載し、概略を記載した。 後に詳細で理解のため、各観点毎の説明と個別の原則や技法へのリンクを記載した。 要約 7つの観点の要約を先に示す。 (変数や関数の)名称は分かりやすくする (変数や関数の)役割は1つにする (変数や関数の)参照は狭くする (変数や関数の)状態は変えられなくする (関数やクラスの)面積は小さくする (関数や
私たちは Ruby on Rails の主要なマルチテナントライブラリ apartment を使ってサービスを提供しています。 Ruby のバージョンを 3.1 系から 3.2 系に上げたときに CSV ファイルを処理する部分でこのテナントの切り替えが意図通りに動作しませんでした。 この事象が興味深かったので共有します。 現在はこの事象に対応済で、私たちの環境は Ruby3.2 系で動作しています。 apartment ではマルチテナント対応部分をほとんど吸収してくれるので、アプリケーションのコードのほうにはあまりマルチテナント特有の処理が出てこず、個別処理のコードに集中できるメリットがあります。 事象が発生したコードは以下のような形式でした。 CSV.parse(filename, headers: true, header_converters: ->(header) { curren
会社で複数の新規事業を立ち上げる機運が高まったことをきっかけに社内向けUIライブラリを開発し、限定公開して利用を始めました。 本記事ではReactで社内向けUIライブラリを開発・ビルド・公開・布教するためのアレコレを共有します。 以下のような話題について知りたい方に特に読んでほしいです。 Private Packageの作り方、配布の方法のイメージがつかない方 CommonJSとES Modules、今はどちらでビルドするのがいいのか知りたい方 ライブラリの作り方について網羅的に知りたい方 前提 利用側のアプリケーションはNext.js固定を前提とする Tailwind CSSを内部的には利用する 利用側のアプリケーションはパフォーマンス(Lighthouseスコア)重視することが多い 社内の様々なレベルのエンジニアがContributeする可能性がある 端的に言うと、社内のプライベートリ
At Airplane, we collect observability data from our own systems as well as remote “agents” that are running in our customers’ infrastructure. The associated outputs, which include the standard “three pillars of observability” (logs, metrics, and traces) are essential for us to monitor our infrastructure and also help customers debug problems in theirs. Over the last year, we’ve made a concerted ef
レッドハットでインテグレーションのためのミドルウェアのテクニカルサポートを担当している山下です。以前、SAGAやEventStormingについて記述すると宣言していたのですが、実際のところ私が書くよりもよっぽど良い日本語の書籍や記事がでていて、もう書く必要もないと思っていたのですが、今回機会をいただいたので約4年ぶりに”マイクロサービスとメッセージングのなぜ"の希望編を書くことになりました。今回の記事ではSAGAやEventStormingの詳細は書かないのですが、私がイベントやメッセージングが必要と考えるに至った危機感や希望を共有します。そうした意味ではむしろ原点ともいえる内容になっています。なお今回記事にはとりわけ個人的な経験や意見が多く含まれますので、事前に異論は認めることにします。 以前の記事はこちら: 「マイクロサービスとメッセージングのなぜ [概要編]」 「マイクロサービスと
この記事は未踏ジュニアAdvent Calendar : 10日目です. カーネル, 書きたくないですか? こんにちは, horizon (@horizon2k38)です. 私は2023年の未踏ジュニアでA9Nというマイクロカーネルを作成していました. 人類なら誰しもがカーネルを書きたいと思ったことがあるはずです. そんな方のために, 未踏期間で得られた "0からカーネルを如何にして学び, 実装したか" という知見をより一般化して解説しようと思います. この記事の内容をすべて達成することで, あなたもきっとカーネルを書くことができるでしょう. やれば出来る きっと 絶対 私No.1 注: この記事はどちらかといえば初心者向けなので, 自信がある方は最下部の"参考文献"と, 私が書いた低レイヤー学習のロードマップのみ読むことをおすすめします. カーネル/OSとは そもそもカーネルとは, 所謂
さまざまなサービスを「ちょっとお試し」と利用していくうちに、いつの間にか大量の宣伝メールが届くようになってしまった人は多いはず。かといってネット上の使い捨て用メールアドレス作成サービスを使用するとセキュリティの心配やサービスが突然停止してしまうリスクがあります。「AnonAddy」はそうした使い捨てできる転送用のメールアドレス作成サービスで、オープンソースのためセルフホストが可能とのこと。早速Dockerを利用してセルフホストを行ってみました。 anonaddy/docker: AnonAddy Docker image https://github.com/anonaddy/docker Free, Open-source Anonymous Email Forwarding - addy.io https://addy.io/ AnonAddyを実行するにはTCPの25番ポート、800
皆さんこんにちは。昨今の技術選定においては、「シンプルさ」が重視されることが良くあります。 特に「イージー VS シンプル」という対立軸が持ち出されることが多く、規模の大きなアプリケーションを作る際には「シンプル」側の技術を選定するほうが有利だという論調がよく見られます。 本当にそうなのか、あるいはそもそも「シンプル」とはどういう意味なのかについては皆さんそれぞれの考えがあるでしょうから、この記事では深入りしません。 代わりに、実際どのような技術がシンプルなのかが気になるところです。そこで、今回は筆者が比較的得意なWebフロントエンドのUIライブラリの領域において、どのライブラリがシンプルなのか調査してみました。 React 先日プロジェクトでReactを使ってみたら、本当にシンプルな実装でやりたいことが全部できちゃうというか、すぐに画面に反映できて開発効率的にも良いなと感じました。 フロ
さあさあ、面白そうなタイトルに惹かれて(?)やってきたそこのあなた!ありがとうございます!! はじめまして、テックタッチの canalun と言います👶 普段は DOM について考えたり、CI/CD の改善をしたりな毎日です! DOM が好きすぎて週刊DOMDOMタイムスというのをやってますので、興味がある方はぜひ見てみてくださいねえ🌞 この記事では前後編2回に分けて、Nx Cloud の主な機能の紹介と実際の導入の仕方を解説します!! 前編にあたる本稿では、Nx Cloud の2大最強ポイントである「CIの自動分散並列実行」と「CI結果のキャッシング」を紹介します。 ちなみに後編ももうあるよ。 tech.techtouch.jp では早速行きましょう! 目次を見てオモロそうなところだけ読むもよし、とりあえず上から読んでみるもよしです。自由にやってくれ!! 👇👇 これは一体なんの記
はじめに DX(開発体験)の向上によって、チームやプロジェクトの持続的なパフォーマンスにプラスの影響を与えると考えられています。また開発体験とは、以下の4つの要素で構成されると言われています。 Fitting architecture(アーキテクチャの適合) Great tools(優れたツール) Processes to back that all up(すべてをバックアップするプロセス) Nontoxic team culture(毒のないチーム文化) この記事では、2番目の優れたツールについて、弊社の開発で使っているものを紹介します。 導入ツール Google Workspace 有名なグループウェアですが、メールやドキュメントよりも、各サービスへアクセスするSSO認証としての側面が強いです。 Slack こちらも有名なチャットサービスです。特にハドルが実装されて以降、社内の場合はわ
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く